一、登陆和退出

1. 远程主机

shell> mysql -h host -u user -p

Enter password: ********

Welcome to the MySQL monitor. Commands end with ; or \g.

mysql>

2. 登陆本机

shell> mysql -u user -p

3. 退出mysql

mysql> QUIT

二、输入查询

查询版本号和当前日期

mysql> SELECT VERSION(), CURRENT_DATE;

+-----------+--------------+

| VERSION() | CURRENT_DATE |

+-----------+--------------+

| 5.7.24 | 2018-11-12 |

+-----------+--------------+

1 row in set (0.01 sec)

mysql>

大小写不敏感

把mysql当计算器用

mysql> SELECT SIN(PI()/4), (4+1)*5;

+--------------------+---------+

| SIN(PI()/4) | (4+1)*5 |

+--------------------+---------+

| 0.7071067811865476 | 25 |

+--------------------+---------+

1 row in set (0.01 sec)

在一行上输入多个语句。分号结束每一个命令:

mysql> SELECT VERSION(); SELECT NOW();

+-----------+

| VERSION() |

+-----------+

| 5.7.24 |

+-----------+

1 row in set (0.00 sec)

+---------------------+

| NOW() |

+---------------------+

| 2018-11-13 00:10:14 |

+---------------------+

1 row in set (0.00 sec)

mysql 通过 查找终止分号;来确定语句的结束位置

mysql> SELECT

-> USER()

-> ,

-> CURRENT_DATE;

+----------------+--------------+

| USER() | CURRENT_DATE |

+----------------+--------------+

| root@localhost | 2018-11-13 |

+----------------+--------------+

1 row in set (0.00 sec)

mysql> SELECT USER(),CURRENT_DATE;

+----------------+--------------+

| USER() | CURRENT_DATE |

+----------------+--------------+

| root@localhost | 2018-11-13 |

+----------------+--------------+

1 row in set (0.00 sec)

通过键入以下内容取消该查询:\c

mysql> SELECT

-> USER()

-> \c

三、创建和使用数据库

展示存在的数据库

mysql> SHOW DATABASES;

+--------------------+

| Database |

+--------------------+

| information_schema |

| falcon |

| mysql |

| performance_schema |

| sys |

+--------------------+

使用数据库

mysql> USE test

Database changed

shell> mysql -h host -u user -p menagerie

Enter password: ********

3.1 创建和选择数据库

mysql> CREATE DATABASE menagerie;

mysql> USE menagerie

Database changed

3.2 创建表

mysql> SHOW TABLES;

Empty set (0.00 sec)

创建表

mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),

-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

展示表单:

mysql> SHOW TABLES;

+---------------------+

| Tables_in_menagerie |

+---------------------+

| pet |

+---------------------+

1 row in set (0.00 sec)

描述表单

mysql> DESCRIBE pet;

+---------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| name | varchar(20) | YES | | NULL | |

| owner | varchar(20) | YES | | NULL | |

| species | varchar(20) | YES | | NULL | |

| sex | char(1) | YES | | NULL | |

| birth | date | YES | | NULL | |

| death | date | YES | | NULL | |

+---------+-------------+------+-----+---------+-------+

6 rows in set (0.01 sec)

3.3 将数据加载到表中

建立表格以后需要:

name

owner

species

sex

birth

death

Fluffy

Harold

cat

f

1993-02-04

Claws

Gwen

cat

m

1994-03-17

Buffy

Harold

dog

f

1989-05-13

Fang

Benny

dog

m

1990-08-27

Bowser

Diane

dog

m

1979-08-31

1995-07-29

Chirpy

Gwen

bird

f

1998-09-11

Whistler

Gwen

bird

1997-12-09

Slim

Benny

snake

m

1996-04-29

保存为pet.txt

从excel中直接复制到pet.txt,空值用\N 表示

Whistler Gwen bird \N 1997-12-09 \N

3.3.1 导入数据

LOAD DATA LOCAL INFILE 'D:/Temp/pet.txt' INTO TABLE pet;

win编辑器

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet

-> LINES TERMINATED BY '\r\n';

在运行 os x 的 apple 计算机上, 您可能想要使用。LINES TERMINATED BY '\r'

3.3.2 插入语句

mysql> INSERT INTO pet

-> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);

3.4 操作表格

SELECT 语法:

SELECT what_to_select

FROM which_table

WHERE conditions_to_satisfy;

3.4.1 查询所有数据

mysql> SELECT * FROM pet;

+----------+--------+---------+------+------------+------------+

| name | owner | species | sex | birth | death |

+----------+--------+---------+------+------------+------------+

| Fluffy | Harold | cat | f | 1993-02-04 | NULL |

| Claws | Gwen | cat | m | 1994-03-17 | NULL |

| Buffy | Harold | dog | f | 1989-05-13 | NULL |

| Fang | Benny | dog | m | 1990-08-27 | NULL |

| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |

| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |

| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |

| Slim | Benny | snake | m | 1996-04-29 | NULL |

| Puffball | Diane | hamster | f | 1999-03-30 | NULL |

+----------+--------+---------+------+------------+------------+

update 语句修复错误记录 :

mysql> UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser';

3.4.2 查询某行

选择特定行:

mysql> SELECT * FROM pet WHERE name = 'Bowser';

+--------+-------+---------+------+------------+------------+

| name | owner | species | sex | birth | death |

+--------+-------+---------+------+------------+------------+

| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |

+--------+-------+---------+------+------------+------------+

选择特定条件:

mysql> SELECT * FROM pet WHERE birth >= '1998-1-1';

+----------+-------+---------+------+------------+------------+

| name | owner | species | sex | birth | death |

+----------+-------+---------+------+------------+------------+

| Chirpy | Gwen | bird | f | 1998-09-11 | 0000-00-00 |

| Puffball | Diane | hamster | f | 1999-03-30 | NULL |

+----------+-------+---------+------+------------+------------+

条件and:

mysql> SELECT * FROM pet WHERE species = 'dog' AND sex = 'f';

+-------+--------+---------+------+------------+------------+

| name | owner | species | sex | birth | death |

+-------+--------+---------+------+------------+------------+

| Buffy | Harold | dog | f | 1989-05-13 | 0000-00-00 |

+-------+--------+---------+------+------------+------------+

条件or:

mysql> SELECT * FROM pet WHERE species = 'snake' OR species = 'bird';

+----------+-------+---------+------+------------+------------+

| name | owner | species | sex | birth | death |

+----------+-------+---------+------+------------+------------+

| Chirpy | Gwen | bird | f | 1998-09-11 | 0000-00-00 |

| Whistler | Gwen | bird | | 1997-12-09 | 0000-00-00 |

| Slim | Benny | snake | m | 1996-04-29 | 0000-00-00 |

+----------+-------+---------+------+------------+------------+

and 、 or 混合使用:

mysql> SELECT * FROM pet WHERE (species = 'cat' AND sex = 'm')

-> OR (species = 'dog' AND sex = 'f');

+-------+--------+---------+------+------------+------------+

| name | owner | species | sex | birth | death |

+-------+--------+---------+------+------------+------------+

| Claws | Gwen | cat | m | 1994-03-17 | 0000-00-00 |

| Buffy | Harold | dog | f | 1989-05-13 | 0000-00-00 |

+-------+--------+---------+------+------------+------------+

3.4.3 查询某列

选择某列,按照 ,分隔

mysql> SELECT name`,` birth FROM pet;

+----------+------------+

| name | birth |

+----------+------------+

| name | 0000-00-00 |

| Fluffy | 1993-02-04 |

| Claws | 1994-03-17 |

| Buffy | 1989-05-13 |

| Fang | 1990-08-27 |

| Bowser | 1989-08-31 |

| Chirpy | 1998-09-11 |

| Whistler | 1997-12-09 |

| Slim | 1996-04-29 |

| Puffball | 1999-03-30 |

+----------+------------+

选择动物主人:

mysql> SELECT owner FROM pet;

+--------+

| owner |

+--------+

| owner |

| Harold |

| Gwen |

| Harold |

| Benny |

| Diane |

| Gwen |

| Gwen |

| Benny |

| Diane |

+--------+

使用DISTINCT去重

mysql> SELECT DISTINCT owner FROM pet;

+--------+

| owner |

+--------+

| owner |

| Harold |

| Gwen |

| Benny |

| Diane |

+--------+

使用WHERE条件查询

mysql> SELECT name, species, birth FROM pet

-> WHERE species = 'dog' OR species = 'cat';

+--------+---------+------------+

| name | species | birth |

+--------+---------+------------+

| Fluffy | cat | 1993-02-04 |

| Claws | cat | 1994-03-17 |

| Buffy | dog | 1989-05-13 |

| Fang | dog | 1990-08-27 |

| Bowser | dog | 1989-08-31 |

+--------+---------+------------+

3.4.4 排序行

使用ORDER BY ,默认升序

mysql> SELECT name, birth FROM pet ORDER BY birth;

+----------+------------+

| name | birth |

+----------+------------+

| name | 0000-00-00 |

| Buffy | 1989-05-13 |

| Bowser | 1989-08-31 |

| Fang | 1990-08-27 |

| Fluffy | 1993-02-04 |

| Claws | 1994-03-17 |

| Slim | 1996-04-29 |

| Whistler | 1997-12-09 |

| Chirpy | 1998-09-11 |

| Puffball | 1999-03-30 |

+----------+------------+

默认不区分大小写排序,如果要区分使用:

ORDER BY BINARY col_name

BINARY:转换为二进制字符,方便排序

使用ORDER BY ,默认升序,如果降序,添加DESC

mysql> SELECT name, birth FROM pet ORDER BY birth DESC;

+----------+------------+

| name | birth |

+----------+------------+

| Puffball | 1999-03-30 |

| Chirpy | 1998-09-11 |

| Whistler | 1997-12-09 |

| Slim | 1996-04-29 |

| Claws | 1994-03-17 |

| Fluffy | 1993-02-04 |

| Fang | 1990-08-27 |

| Bowser | 1989-08-31 |

| Buffy | 1989-05-13 |

| name | 0000-00-00 |

+----------+------------+

多个列排序:

先按照动物种类升序,然后按照出生日期降序

mysql> SELECT name, species, birth FROM pet

-> ORDER BY species, birth DESC;

+----------+---------+------------+

| name | species | birth |

+----------+---------+------------+

| Chirpy | bird | 1998-09-11 |

| Whistler | bird | 1997-12-09 |

| Claws | cat | 1994-03-17 |

| Fluffy | cat | 1993-02-04 |

| Fang | dog | 1990-08-27 |

| Bowser | dog | 1989-08-31 |

| Buffy | dog | 1989-05-13 |

| Puffball | hamster | 1999-03-30 |

| Slim | snake | 1996-04-29 |

| name | species | 0000-00-00 |

+----------+---------+------------+

3.4.5 ‎日期计算

mysql> SELECT TIMESTAMPDIFF(YEAR,'1989-08-31',CURDATE());

+--------------------------------------------+

| TIMESTAMPDIFF(YEAR,'1989-08-31',CURDATE()) |

+--------------------------------------------+

| 29 |

+--------------------------------------------+

常用时间函数:

mysql> SELECT NOW(),CURDATE(),CURTIME();

+---------------------+------------+-----------+

| NOW() | CURDATE() | CURTIME() |

+---------------------+------------+-----------+

| 2018-11-13 10:21:28 | 2018-11-13 | 10:21:28 |

+---------------------+------------+-----------+

查询显示每个宠物的出生日期、当前日期,用age做别名

mysql> SELECT name, birth, CURDATE(),

-> TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age

-> FROM pet;

+----------+------------+------------+------+

| name | birth | CURDATE() | age |

+----------+------------+------------+------+

| Fluffy | 1993-02-04 | 2018-11-13 | 25 |

| Claws | 1994-03-17 | 2018-11-13 | 24 |

| Buffy | 1989-05-13 | 2018-11-13 | 29 |

| Fang | 1990-08-27 | 2018-11-13 | 28 |

| Bowser | 1989-08-31 | 2018-11-13 | 29 |

| Chirpy | 1998-09-11 | 2018-11-13 | 20 |

| Whistler | 1997-12-09 | 2018-11-13 | 20 |

| Slim | 1996-04-29 | 2018-11-13 | 22 |

| Puffball | 1999-03-30 | 2018-11-13 | 19 |

+----------+------------+------------+------+

查询同时 按照姓名排序

mysql> SELECT name, birth, CURDATE(),

-> TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age

-> FROM pet ORDER BY name;

+----------+------------+------------+------+

| name | birth | CURDATE() | age |

+----------+------------+------------+------+

| Bowser | 1989-08-31 | 2018-11-13 | 29 |

| Buffy | 1989-05-13 | 2018-11-13 | 29 |

| Chirpy | 1998-09-11 | 2018-11-13 | 20 |

| Claws | 1994-03-17 | 2018-11-13 | 24 |

| Fang | 1990-08-27 | 2018-11-13 | 28 |

| Fluffy | 1993-02-04 | 2018-11-13 | 25 |

| Puffball | 1999-03-30 | 2018-11-13 | 19 |

| Slim | 1996-04-29 | 2018-11-13 | 22 |

| Whistler | 1997-12-09 | 2018-11-13 | 20 |

+----------+------------+------------+------+

查询同时 按照年龄排序

mysql> SELECT name, birth, CURDATE(),

-> TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age

-> FROM pet ORDER BY age;

+----------+------------+------------+------+

| name | birth | CURDATE() | age |

+----------+------------+------------+------+

| Puffball | 1999-03-30 | 2018-11-13 | 19 |

| Chirpy | 1998-09-11 | 2018-11-13 | 20 |

| Whistler | 1997-12-09 | 2018-11-13 | 20 |

| Slim | 1996-04-29 | 2018-11-13 | 22 |

| Claws | 1994-03-17 | 2018-11-13 | 24 |

| Fluffy | 1993-02-04 | 2018-11-13 | 25 |

| Fang | 1990-08-27 | 2018-11-13 | 28 |

| Buffy | 1989-05-13 | 2018-11-13 | 29 |

| Bowser | 1989-08-31 | 2018-11-13 | 29 |

+----------+------------+------------+------+

查询已经死亡的宠物

把默认导入的数值从'0000-00-00' 改成'NUll'

UPDATE pet SET death = NULL WHERE death= 0000-00-00;

mysql> SELECT name, birth, death,

-> TIMESTAMPDIFF(YEAR,birth,death) AS age

-> FROM pet WHERE death IS NOT NULL ORDER BY age;

+--------+------------+------------+------+

| name | birth | death | age |

+--------+------------+------------+------+

| Bowser | 1989-08-31 | 1995-07-29 | 5 |

+--------+------------+------------+------+

MySQL 的一些日期函数:

mysql> SELECT YEAR('1987-01-01');

+--------------------+

| YEAR('1987-01-01') |

+--------------------+

| 1987 |

+--------------------+

mysql> SELECT MONTH('2008-02-03');

+---------------------+

| MONTH('2008-02-03') |

+---------------------+

| 2 |

+---------------------+

mysql> SELECT MONTHNAME('2008-02-03');

+-------------------------+

| MONTHNAME('2008-02-03') |

+-------------------------+

| February |

+-------------------------+

现在是今年的 多少天 多少周

mysql> SELECT DAYOFYEAR(now()),WEEKOFYEAR(now());

+------------------+-------------------+

| DAYOFYEAR(now()) | WEEKOFYEAR(now()) |

+------------------+-------------------+

| 317 | 46 |

+------------------+-------------------+

2008-01-03第多少天,多少周

mysql> SELECT DAYOFYEAR('2008-01-03'),WEEKOFYEAR('2008-01-03');

+-------------------------+--------------------------+

| DAYOFYEAR('2008-01-03') | WEEKOFYEAR('2008-01-03') |

+-------------------------+--------------------------+

| 3 | 1 |

+-------------------------+--------------------------+

查询宠物出生月

mysql> SELECT name, birth, MONTH(birth) FROM pet;

+----------+------------+--------------+

| name | birth | MONTH(birth) |

+----------+------------+--------------+

| Fluffy | 1993-02-04 | 2 |

| Claws | 1994-03-17 | 3 |

| Buffy | 1989-05-13 | 5 |

| Fang | 1990-08-27 | 8 |

| Bowser | 1989-08-31 | 8 |

| Chirpy | 1998-09-11 | 9 |

| Whistler | 1997-12-09 | 12 |

| Slim | 1996-04-29 | 4 |

| Puffball | 1999-03-30 | 3 |

+----------+------------+--------------+

查询5月出生的宠物

mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5;

+-------+------------+

| name | birth |

+-------+------------+

| Buffy | 1989-05-13 |

+-------+------------+

2018-05-01 添加1天

mysql> SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);

+---------------------------------------+

| DATE_ADD('2018-05-01',INTERVAL 1 DAY) |

+---------------------------------------+

| 2018-05-02 |

+---------------------------------------+

查询下个月是哪个月

mysql> SELECT MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));

+---------------------------------------------+

| MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH)) |

+---------------------------------------------+

| 12 |

+---------------------------------------------+

查询即将生日的宠物,距离目前最近的一个月

方法1:当前月份+1个月

mysql> SELECT name, birth FROM pet

-> WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));

+----------+------------+

| name | birth |

+----------+------------+

| Whistler | 1997-12-09 |

+----------+------------+

方法2:当前月份取余+1

mysql> SELECT name, birth FROM pet

-> WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1;

+----------+------------+

| name | birth |

+----------+------------+

| Whistler | 1997-12-09 |

+----------+------------+

MOD(12, 5)

mysql> SELECT MOD(12, 5);

+------------+

| MOD(12, 5) |

+------------+

| 2 |

+------------+

3.4.6 使用空值

NULL value :a missing unknown value,要和其他值区别对待

测试NULL,使用

mysql> SELECT 1 IS NULL, 1 IS NOT NULL;

+-----------+---------------+

| 1 IS NULL | 1 IS NOT NULL |

+-----------+---------------+

| 0 | 1 |

+-----------+---------------+

mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;

+-----------+---------------+------------+----------------+

| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |

+-----------+---------------+------------+----------------+

| 0 | 1 | 0 | 1 |

+-----------+---------------+------------+----------------+

不能使用算术笔记用算符判断null

=,

3.4.7 匹配方式

标准的 sql 模式匹配

正则表达式的模式匹配

默认不区分大小写

标准匹配

使用:

查找b开头的名字:

mysql> SELECT * FROM pet WHERE name LIKE 'b%';

+--------+--------+---------+------+------------+------------+

| name | owner | species | sex | birth | death |

+--------+--------+---------+------+------------+------------+

| Buffy | Harold | dog | f | 1989-05-13 | NULL |

| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |

+--------+--------+---------+------+------------+------------+

查找fy结尾的名字:

mysql> SELECT * FROM pet WHERE name LIKE '%fy';

+--------+--------+---------+------+------------+-------+

| name | owner | species | sex | birth | death |

+--------+--------+---------+------+------------+-------+

| Fluffy | Harold | cat | f | 1993-02-04 | NULL |

| Buffy | Harold | dog | f | 1989-05-13 | NULL |

查找名字包含一个w:

mysql> SELECT * FROM pet WHERE name LIKE '%w%';

+----------+-------+---------+------+------------+------------+

| name | owner | species | sex | birth | death |

+----------+-------+---------+------+------------+------------+

| Claws | Gwen | cat | m | 1994-03-17 | NULL |

| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |

| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |

+----------+-------+---------+------+------------+------------+

查找名字是5个字符的:

mysql> SELECT * FROM pet WHERE name LIKE '_____';

+-------+--------+---------+------+------------+-------+

| name | owner | species | sex | birth | death |

+-------+--------+---------+------+------------+-------+

| Claws | Gwen | cat | m | 1994-03-17 | NULL |

| Buffy | Harold | dog | f | 1989-05-13 | NULL |

+-------+--------+---------+------+------------+-------+

正则匹配

使用:

RLIKE NOT RLIKE 和上述等价

查找b开头的名字:

mysql> SELECT * FROM pet WHERE name REGEXP '^b';

+--------+--------+---------+------+------------+------------+

| name | owner | species | sex | birth | death |

+--------+--------+---------+------+------------+------------+

| Buffy | Harold | dog | f | 1989-05-13 | NULL |

| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |

+--------+--------+---------+------+------------+------------+

若要强制regexp比较区分大小写, 请使用binary关键字将其中一个字符串设置为二进制字符串。

匹配名称由小写:b开头

SELECT * FROM pet WHERE name REGEXP BINARY '^b';

查找fy结尾的名字:

mysql> SELECT * FROM pet WHERE name REGEXP 'fy$';

+--------+--------+---------+------+------------+-------+

| name | owner | species | sex | birth | death |

+--------+--------+---------+------+------------+-------+

| Fluffy | Harold | cat | f | 1993-02-04 | NULL |

| Buffy | Harold | dog | f | 1989-05-13 | NULL |

+--------+--------+---------+------+------------+-------+

查找名字包含一个w:

mysql> SELECT * FROM pet WHERE name REGEXP 'w';

+----------+-------+---------+------+------------+------------+

| name | owner | species | sex | birth | death |

+----------+-------+---------+------+------------+------------+

| Claws | Gwen | cat | m | 1994-03-17 | NULL |

| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |

| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |

+----------+-------+---------+------+------------+------------+

查找名字是5个字符的

mysql> SELECT * FROM pet WHERE name REGEXP '^.....$';

+-------+--------+---------+------+------------+-------+

| name | owner | species | sex | birth | death |

+-------+--------+---------+------+------------+-------+

| Claws | Gwen | cat | m | 1994-03-17 | NULL |

| Buffy | Harold | dog | f | 1989-05-13 | NULL |

+-------+--------+---------+------+------------+-------+

或者^.{5}$ :^开头$结尾

mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$';

+-------+--------+---------+------+------------+-------+

| name | owner | species | sex | birth | death |

+-------+--------+---------+------+------------+-------+

| Claws | Gwen | cat | m | 1994-03-17 | NULL |

| Buffy | Harold | dog | f | 1989-05-13 | NULL |

+-------+--------+---------+------+------------+-------+

3.4.8 统计行

统计行数

mysql> SELECT COUNT(*) FROM pet;

+----------+

| COUNT(*) |

+----------+

| 9 |

+----------+

统计每个人有多少只宠物

mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;

+--------+----------+

| owner | COUNT(*) |

+--------+----------+

| Benny | 2 |

| Diane | 2 |

| Gwen | 3 |

| Harold | 2 |

+--------+----------+

统计每种动物的数量:

mysql> SELECT species, COUNT(*) FROM pet GROUP BY species;

+---------+----------+

| species | COUNT(*) |

+---------+----------+

| bird | 2 |

| cat | 2 |

| dog | 3 |

| hamster | 1 |

| snake | 1 |

统计物种性别:

mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex;

+------+----------+

| sex | COUNT(*) |

+------+----------+

| NULL | 1 |

| f | 4 |

| m | 4 |

+------+----------+

物种和性别的组合:

mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;

+---------+------+----------+

| species | sex | COUNT(*) |

+---------+------+----------+

| bird | NULL | 1 |

| bird | f | 1 |

| cat | f | 1 |

| cat | m | 1 |

| dog | f | 1 |

| dog | m | 2 |

| hamster | f | 1 |

| snake | m | 1 |

+---------+------+----------+

只针对某个字段筛选,不用筛选整行

选择cat 和 dog种类,按照性别物种组合

mysql> SELECT species, sex, COUNT(*) FROM pet

-> WHERE species = 'dog' OR species = 'cat'

-> GROUP BY species, sex;

+---------+------+----------+

| species | sex | COUNT(*) |

+---------+------+----------+

| cat | f | 1 |

| cat | m | 1 |

| dog | f | 1 |

| dog | m | 2 |

+---------+------+----------+

列出已知动物性别:

mysql> SELECT species, sex, COUNT(*) FROM pet

-> WHERE sex IS NOT NULL

-> GROUP BY species, sex;

+---------+------+----------+

| species | sex | COUNT(*) |

+---------+------+----------+

| bird | f | 1 |

| cat | f | 1 |

| cat | m | 1 |

| dog | f | 1 |

| dog | m | 2 |

| hamster | f | 1 |

| snake | m | 1 |

+---------+------+----------+

mysql> SET sql_mode = 'ONLY_FULL_GROUP_BY';-- 启用

mysql> SELECT owner, COUNT(*) FROM pet;

ERROR 1140 (42000):

ONLY_FULL_GROUP_BY 关闭后,结果不确定,系统随意添加一个值,最好关闭

mysql> SET sql_mode = ''; -- 关闭

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT owner, COUNT(*) FROM pet;

+--------+----------+

| owner | COUNT(*) |

+--------+----------+

| Harold | 9 |

+--------+----------+

mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;

+--------+----------+

| owner | COUNT(*) |

+--------+----------+

| Benny | 2 |

| Diane | 2 |

| Gwen | 3 |

| Harold | 2 |

+--------+----------+

3.4.9 使用多个表

此表格跟踪记录你的宠物,当你想记录他们的信息,比如看兽医、生幼崽、买玩具等事件,就需要另外一个表单记录,需要如下信息:

宠物名称:name

事件日期:date

事件类型:type

事件描述:emark

创建表一个符合上述要素的表单:

mysql> CREATE TABLE event (name VARCHAR(20), date DATE,

-> type VARCHAR(15), remark VARCHAR(255));

将下述内容存储为event.txt

name

date

type

remark

Fluffy

1995-05-15

litter

4 kittens, 3 female, 1 male

Buffy

1993-06-23

litter

5 puppies, 2 female, 3 male

Buffy

1994-06-19

litter

3 puppies, 3 female

Chirpy

1999-03-21

vet

needed beak straightened

Slim

1997-08-03

vet

broken rib

Bowser

1991-10-12

kennel

Fang

1991-10-12

kennel

Fang

1998-08-28

birthday

Gave him a new chew toy

Claws

1998-03-17

birthday

Gave him a new flea collar

Whistler

1998-12-09

birthday

First birthday

导入内容到表单

mysql> LOAD DATA LOCAL INFILE 'event.txt' INTO TABLE event;

假设:想知道每个宠物下崽时的年龄,宠物妈妈下崽时间在event表单,但是,出生日期在pet表单,所以要同时查询2个表单。

mysql> SELECT pet.name,

-> TIMESTAMPDIFF(YEAR,birth,date) AS age,

-> remark

-> FROM pet INNER JOIN event

-> ON pet.name = event.name

-> WHERE event.type = 'litter';

+--------+------+------------------------------+

| name | age | remark |

+--------+------+------------------------------+

|Fluffy | 2 | 4 kittens, 3 female, 1 male

|Buffy | 4 | 5 puppies, 2 female, 3 male

| 5 | 3 puppies, 3 female

+--------+------+------------------------------+

jion表单:

是为从两张表获取信息

需要指定匹配规则,上述例子都有'name'

需要指定前缀ON pet.name = event.name

表的自身连接

宠物的雌雄配对:

mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species

-> FROM pet AS p1 INNER JOIN pet AS p2

-> ON p1.species = p2.species AND p1.sex = 'f' AND p2.sex = 'm';

+--------+------+--------+------+---------+

| name | sex | name | sex | species |

+--------+------+--------+------+---------+

| Fluffy | f | Claws | m | cat |

| Buffy | f | Fang | m | dog |

| Buffy | f | Bowser | m | dog |

+--------+------+--------+------+---------+

3.4 获取数据库和表的信息

查看目前使用的数据库

mysql> SELECT DATABASE();

+------------+

| DATABASE() |

+------------+

| menagerie |

+------------+

查看表

mysql> SHOW TABLES;

+---------------------+

| Tables_in_menagerie |

+---------------------+

| event |

| pet |

+---------------------+

查看表结构

mysql> DESCRIBE pet;

+---------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| name | varchar(20) | YES | | NULL | |

| owner | varchar(20) | YES | | NULL | |

| species | varchar(20) | YES | | NULL | |

| sex | char(1) | YES | | NULL | |

| birth | date | YES | | NULL | |

| death | date | YES | | NULL | |

+---------+-------------+------+-----+---------+-------+

3.5 批处理模式

在mysql内运行脚本:

mysql> source filename;

mysql> \. filename

mysql 参考网站_MySQL入门(参考官网)相关推荐

  1. HTML5期末大作业:网站——响应式网络游戏官网HTML+CSS+JavaScript ~ 学生HTML个人网页作业作品下载 ~ web课程设计网页规划与设计 ~大学生个人网站作业模板 ~简单个人网页

    HTML5期末大作业:网站--响应式网络游戏官网HTML+CSS+JavaScript ~ 学生HTML个人网页作业作品下载 ~ web课程设计网页规划与设计 ~大学生个人网站作业模板 ~简单个人网页 ...

  2. 关于假冒网站仿冒网易云信官网相关情况的声明

    近日,网易云信与客户共同发现有仿冒网站假冒网易云信官网,以网易云信或网易公司的名义骗取用户的服务费用,行为性质恶劣,致使网易云信客户遭受严重损失.针对上述假冒行为,网易云信将采取法律途经予以追究,维护 ...

  3. HTML5期末大作业:美食主题网站设计——美食零食官网响应式网页设计(6页) HTML+CSS+JavaScript

    HTML5期末大作业:美食主题网站设计--美食零食官网响应式网页设计(6页) HTML+CSS+JavaScript 期末作业HTML代码 学生网页课程设计期末作业下载 web网页设计制作成品 常见网 ...

  4. 网站项目-模仿三国杀官网

    官网地址:http://www.sanguosha.com/ 提要:我是看书党,没有看过相关类型的视频,在W3C学习了基础的HTML知识,自己就开始找网站模仿,我的目标是游戏开发,所以就模仿了一个游戏 ...

  5. Jmeter入门1 官网下载及安装

    1  Jmeter运行需要java环境.首先需要安装JDK. 图标是这样的:  2 下载apache-jmeter包. jmeter官网:http://jmeter.apache.org/ 3  解压 ...

  6. mysql install语句_MySQL入门学习(一)安装与基本操作

    安装篇 PHP+MySQL+Linux目前已逐渐成为小型web服务器的一种经典组合.在Windows环境下构筑和调试MySQL数据库是许多网站开发者的一种首选.本人在Windows98环境下初学MyS ...

  7. sae mysql 同步本地_MYSQL入门之三_将本地MySQL数据导入SAE数据库_MySQL

    bitsCN.com MYSQL入门之三_将本地MySQL数据导入SAE数据库 1. MySQL字符集 MySQL的默认字符集是latin1,将本地MySQL库导出成sql,再导入到SAE的MySQL ...

  8. mysql中的%_mysql入门

    MySQL 数据库 1 数据库概念(了解) 1.1 什么是数据库 数据库就是用来存储和管理数据的仓库! 数据库存储数据的优先: 可存储大量数据: 方便检索: 保持数据的一致性.完整性: 安全,可共享: ...

  9. spss和mysql哪个好学_MYSQL 入门全套

    2 数据库管理是干什么用的? a. 将数据保存到文件或内存 b. 接收特定的命令,然后对文件进行相应的操作 a. 将数据保存到文件或内存 b. 接收特定的命令,然后对文件进行相应的操作 PS:如果有了 ...

  10. mysql unit类型_mysql入门-数据类型(二)

    mysql入门-数据类型(二) 今天说一下mysql的数据类型日期,mysql的日期类型有date.datetime.time.year.timestamp. date其实就是日期,例如2019年07 ...

最新文章

  1. 用Perl发送邮件小例子
  2. nonlocal python3_Python3中 对local和nonlocal 关键字的认识
  3. MongoDB 聚合操作之$group使用
  4. 每天一道LeetCode-----找到所有被某个字符包围的另一个字符
  5. 网络安全——ipsec
  6. springboot开启debug日志_SpringBoot 如何优雅的打印日志?
  7. 五个免费UML建模工具推荐
  8. OpenJ_Bailian 4017 爬楼梯
  9. HTML与XHTML区别
  10. 我的FPGA入门学习计划
  11. 如何root安卓手机_如何从我的字体里面提取TTF并阉割成未Root安卓手机能用的?...
  12. transform 二维转变
  13. NPM私有服务器搭建方法——sinopia
  14. 2015/08/24
  15. Java编程:获取输入的三种方法
  16. 抖音短视频数据分析报告工具
  17. MD5详解(校验文件完整性)
  18. mysql front连接_如何成功用MySQL-Front连接MySQL?
  19. 怎么用计算机算加权平均数,教你如何制作加权平均分计算器
  20. 学习Java可以干什么?

热门文章

  1. 利用循环队列实现的无锁日志流程图
  2. 显示卡生产流水线揭密
  3. 颗粒包装机三维图人体三维模型流水线设备三维模型水井装置三维图数控划线机设计三维图圆锥齿轮千斤顶三维图华硕水冷电脑主板三维图小齿轮油泵三维图减速器三维装配图手动攻丝机三维图轴承三维图
  4. 持续集成(CI)、自动化构建和自动化测试--初探
  5. 直播卖货系统,如何实现数据库的主从同步
  6. gdc服务器修复,gdc服务器错误代码
  7. 杀死僵尸进程ZooKeeperMain
  8. if语句(关系表达式)中想要表达三个表达式的关系
  9. 二、T100应收管理之订金立帐
  10. Jenkins File Operations 插件