DML
操作主要有以下命令:
SELECT:查询操作,按照一定的条件,在对应的关系上挑选对应的字段或者对应行的命令
SELECTC查询例子:SELECT select_list FROM tbl_name WHERE qualification(搜索标准)
SELECT支持的查询类型一般分为三类
简单查询(单表查询)
多表查询
子查询(嵌套查询)
INSERT INTO
DELETE
UPDATE
使用INSERT
查询时,会用到FROM
关键字FROM
子句后面跟表(可以是多表,或者关系语句(如再加一个SELECT
语句)),如果跟一个表,就是单表查询,如果是多个表,就是多表查询,如果是一个关系语句,就是嵌套查询
单表查询
使用SELECT
对单表所有字段进行查询:
mysql> SHOW TABLES; +-------------------+ | Tables_in_classes | +-------------------+ | courses | +-------------------+ 1 row in set (0.00 sec) mysql> SELECT * FROM courses; //*是一个通配符,表示所有字段 +-----+-----------------+--------------+ | cid | subject | level | +-----+-----------------+--------------+ | 1 | 密码学基础 | 学位课 | | 2 | 走进通信 | 非学位课 | | 3 | JAVA编程 | 非学位课 | +-----+-----------------+--------------+ 3 rows in set (0.00 sec) //如果要查询某一个或者几个字段,则将*改为对应字段的名称。这种方式称之为投影 mysql> SELECT cid,subject FROM courses; +-----+-----------------+ | cid | subject | +-----+-----------------+ | 3 | JAVA编程 | | 1 | 密码学基础 | | 2 | 走进通信 | +-----+-----------------+ 3 rows in set (0.00 sec) //如果要查询所有字段的某些行,可以使用WHERE进行过滤。这种方式称之为选择 mysql> SELECT * FROM courses WHERE cid<=2; +-----+-----------------+--------------+ | cid | subject | level | +-----+-----------------+--------------+ | 1 | 密码学基础 | 学位课 | | 2 | 走进通信 | 非学位课 | +-----+-----------------+--------------+ 2 rows in set (0.00 sec)
在使用INSERT
命令时,可以加入DISTINCT
来解决冗余问题,比如我们只要查询courses
表种课程的level
有几种,就可以添加关键字DISTINCT
,表示相同的值只显示一次
//为了证明操作的真实性,我又添加了一门subject mysql> SELECT * FROM courses; +-----+-----------------+--------------+ | cid | subject | level | +-----+-----------------+--------------+ | 1 | 密码学基础 | 学位课 | | 2 | 走进通信 | 非学位课 | | 3 | JAVA编程 | 非学位课 | | 4 | 体育 | 学位课 | +-----+-----------------+--------------+ 4 rows in set (0.00 sec) mysql> SELECT DISTINCT level FROM courses; +--------------+ | level | +--------------+ | 学位课 | | 非学位课 | +--------------+ 2 rows in set (0.00 sec)
FROM
子句后面跟表(可以是多表,或者关系语句(如再加一个SELECT
语句)),如果跟一个表,就是单表查询,如果是多个表,就是多表查询,如果是一个关系语句,就是嵌套查询
WHERE的使用
WHERE
子句用来指定一个布尔关系表达式(为真为假或者一个范围),通常使用=,<,>,<=,>=,!
等。在做数值比较时,不加引号;在做字符串比较时,要添加引号;这种查询方式很不理想,因为我们无法有效使用索引
使用组合表达式,对数据库进行查询:
注意:组合表达式之间用逻辑关系符连接
MYSQL中的逻辑符:
AND
OR
NOT
BETWEEN AND
LIKE
REGEXP(RLIKE)
IN
mysql> SELECT * FROM courses WHERE cid>1 & cid<4; +-----+--------------+--------------+ | cid | subject | level | +-----+--------------+--------------+ | 2 | 走进通信 | 非学位课 | | 3 | JAVA编程 | 非学位课 | +-----+--------------+--------------+ 2 rows in set (0.00 sec) mysql> SELECT * FROM courses WHERE cid>1 & level='学位课'; +-----+-----------------+-----------+ | cid | subject | level | +-----+-----------------+-----------+ | 1 | 密码学基础 | 学位课 | +-----+-----------------+-----------+ 1 row in set, 1 warning (0.00 sec) mysql> SELECT * FROM courses WHERE subject LIKE '体%'; +-----+---------+-----------+ | cid | subject | level | +-----+---------+-----------+ | 4 | 体育 | 学位课 | +-----+---------+-----------+ 1 row in set (0.00 sec) mysql> SELECT * FROM courses WHERE subject LIKE '密____';//跟了四个_ +-----+-----------------+-----------+ | cid | subject | level | +-----+-----------------+-----------+ | 1 | 密码学基础 | 学位课 | +-----+-----------------+-----------+ 1 row in set (0.00 sec) mysql> SELECT * FROM courses WHERE subject LIKE '%A%'; +-----+------------+--------------+ | cid | subject | level | +-----+------------+--------------+ | 3 | JAVA编程 | 非学位课 | +-----+------------+--------------+ 1 row in set (0.00 sec)
%是任意长度任意字符;_是单个长度任意字符
为了更好的展示效果,扩充了courses
表的内容:
mysql> SELECT * FROM courses; +-----+-----------------+--------------+---------+ | cid | subject | level | teacher | +-----+-----------------+--------------+---------+ | 1 | 密码学基础 | 学位课 | Rose | | 2 | 走进通信 | 非学位课 | Cindy | | 3 | JAVA编程 | 非学位课 | Tony | | 4 | 体育 | 学位课 | Jerry | | 5 | 通信原理 | 学位课 | Kobe | +-----+-----------------+--------------+---------+ 5 rows in set (0.00 sec)
mysql
查询支持正则表达式,如:查询teacher
以大写J T
开头的内容:
mysql> SELECT * FROM courses WHERE teacher LIKE 'T%' OR teacher LIKE 'J%'; +-----+------------+--------------+---------+ | cid | subject | level | teacher | +-----+------------+--------------+---------+ | 3 | JAVA编程 | 非学位课 | Tony | | 4 | 体育 | 学位课 | Jerry | +-----+------------+--------------+---------+ 2 rows in set (0.00 sec) //当然,这种方式比较本中,有个简单的方法,即使用正则表达式 mysql> SELECT * FROM courses WHERE teacher RLIKE '^[TJ].*'; +-----+------------+--------------+---------+ | cid | subject | level | teacher | +-----+------------+--------------+---------+ | 3 | JAVA编程 | 非学位课 | Tony | | 4 | 体育 | 学位课 | Jerry | +-----+------------+--------------+---------+ 2 rows in set (0.00 sec)
离散取值查询的时候,我们可以使用列表,如:查找cid
为1 3
的subject
mysql> SELECT subject FROM courses WHERE cid IN(1,3); +-----------------+ | subject | +-----------------+ | JAVA编程 | | 密码学基础 | +-----------------+ 2 rows in set (0.00 sec)
关于NULLC查询
如果WHERE
条件是NULL
,则不能使用=
,因为 NULL
是很危险的 使用关键字IS
mysql> SELECT * FROM courses WHERE teacher IS NULL; Empty set (0.00 sec) //这里没有为NULL的,所以显示为0 mysql> SELECT * FROM courses WHERE teacher IS NOT NULL; +-----+-----------------+--------------+---------+ | cid | subject | level | teacher | +-----+-----------------+--------------+---------+ | 1 | 密码学基础 | 学位课 | Rose | | 2 | 走进通信 | 非学位课 | Cindy | | 3 | JAVA编程 | 非学位课 | Tony | | 4 | 体育 | 学位课 | Jerry | | 5 | 通信原理 | 学位课 | Kobe | +-----+-----------------+--------------+---------+ 5 rows in set (0.00 sec)
查询排序
ORDER BY子句
如果我们想对查询的结果进行排序,可以使用ORDER BY
如:查询courses
表中内容,并且输出结果时,按照teacher
名字进行排序
mysql> SELECT * FROM courses ORDER BY teacher; +-----+-----------------+--------------+---------+ | cid | subject | level | teacher | +-----+-----------------+--------------+---------+ | 2 | 走进通信 | 非学位课 | Cindy | | 4 | 体育 | 学位课 | Jerry | | 5 | 通信原理 | 学位课 | Kobe | | 1 | 密码学基础 | 学位课 | Rose | | 3 | JAVA编程 | 非学位课 | Tony | +-----+-----------------+--------------+---------+ 5 rows in set (0.00 sec) //上面时升序输出(ASC),默认时升序,所以可以不添加关键字;如果要降序输出,则还要添加关键字DESC mysql> SELECT * FROM courses ORDER BY teacher DESC; +-----+-----------------+--------------+---------+ | cid | subject | level | teacher | +-----+-----------------+--------------+---------+ | 3 | JAVA编程 | 非学位课 | Tony | | 1 | 密码学基础 | 学位课 | Rose | | 5 | 通信原理 | 学位课 | Kobe | | 4 | 体育 | 学位课 | Jerry | | 2 | 走进通信 | 非学位课 | Cindy | +-----+-----------------+--------------+---------+ 5 rows in set (0.00 sec)
数据存储在磁盘上有三种方式:堆方式、顺序方式、HASH方式,如果数据本来就是乱的存放在磁盘上,则要按顺序读取数据十分消耗资源,所以在存储时,让它进行顺序存储是很必要的,所以排序是很重要的
字段别名查找的时候,给字段起别名输出
同理,表也支持别名
mysql> SELECT teacher AS student FROM courses ORDER BY teacher DESC; +---------+ | student | +---------+ | Tony | | Rose | | Kobe | | Jerry | | Cindy | +---------+ 5 rows in set (0.00 sec) mysql> SELECT 3+2 AS sum; +-----+ | sum | +-----+ | 5 | +-----+ 1 row in set (0.00 sec)
LIMIT子句
LIMIT [offset,]count
offset表示偏移量,count表示取的个数
mysql> SELECT teacher FROM courses LIMIT 2 ; +---------+ | teacher | +---------+ | Rose | | Cindy | +---------+ 2 rows in set (0.00 sec) //表示查看前两行的teacher名 mysql> SELECT teacher FROM courses LIMIT 1,2 ; +---------+ | teacher | +---------+ | Cindy | | Tony | +---------+ 2 rows in set (0.00 sec) //表示略过第一个,查看下来的两个的teacher名 第一个1是偏移量
聚合:所谓聚合就是对表中的字段进行条件计算,对数据进行特殊操作过滤的动作。如:
求某一字段所有值的平均值,就要使用AVG
关键字。其它聚合操作还有MIN、MAX、SUM、COUNT
求courses
表中cid
的平均值
mysql> SELECT AVG(cid) FROM courses; +----------+ | AVG(cid) | +----------+ | 3.0000 | +----------+ 1 row in set (0.00 sec)
同理,要查询最小,最大,和,条目数等使用MIN、MAX、SUM、COUNT
等
mysql> SELECT SUM(cid) FROM courses; //查询cid字段所有数据之和 +----------+ | SUM(cid) | +----------+ | 15 | +----------+ 1 row in set (0.01 sec) mysql> SELECT MIN(cid) FROM courses; //查询cid字段最小的数据 +----------+ | MIN(cid) | +----------+ | 1 | +----------+ 1 row in set (0.00 sec) mysql> SELECT MAX(cid) FROM courses; //查询cid字段最大的数据 +----------+ | MAX(cid) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> SELECT COUNT(cid) FROM courses; //查询cid字段有多少条目,这里的 5 指的是总共有 5 行数据 +------------+ | COUNT(cid) | +------------+ | 5 | +------------+ 1 row in set (0.00 sec)
这样的聚合操作也可以和WHERE
进行结合
mysql> SELECT MAX(cid) FROM courses WHERE level='学位课'; +----------+ | MAX(cid) | +----------+ | 5 | +----------+ 1 row in set (0.09 sec) mysql> SELECT MAX(cid) FROM courses WHERE level='非学位课'; +----------+ | MAX(cid) | +----------+ | 3 | +----------+ 1 row in set (0.00 sec)
GROUP BY使用该关键字,可以实现对某一字段进行分组。分组的主要目的就是进行聚合计算
mysql> SELECT cid,level FROM courses; +-----+--------------+ | cid | level | +-----+--------------+ | 1 | 学位课 | | 2 | 非学位课 | | 3 | 非学位课 | | 4 | 学位课 | | 5 | 学位课 | +-----+--------------+ 5 rows in set (0.00 sec) //使用GROUP BY进行分组,则不同组的数据信息只显示一次 mysql> SELECT cid,level FROM courses GROUP BY level; +-----+--------------+ | cid | level | +-----+--------------+ | 1 | 学位课 | | 2 | 非学位课 | +-----+--------------+ 2 rows in set (0.00 sec)
分组的主要目的就是进行聚合计算,如:
想知道非学位课有多少门,非学位课有多少门?
mysql> SELECT level,COUNT('level')FROM courses GROUP BY level; +--------------+----------------+ | level | COUNT('level') | +--------------+----------------+ | 学位课 | 3 | | 非学位课 | 2 | +--------------+----------------+ 2 rows in set (0.00 sec)
HAVING过滤,只能和GROUP BY
一起使用,用于将GROUP BY
的结果再次进行过滤,其实质和WHERE
一样
mysql> SELECT level,COUNT('level') FROM courses GROUP BY level HAVING level='学位课'; +-----------+----------------+ | level | COUNT('level') | +-----------+----------------+ | 学位课 | 3 | +-----------+----------------+ 1 row in set (0.00 sec)
多表查询
为了进行多表查询的学习创建了两个表
mysql> SELECT * FROM subjects; //第一个表,包含课程名(subject),和选课人数(tid) +-----+---------+------+ | cid | subject | tid | +-----+---------+------+ | 1 | 语文 | 4 | | 2 | 数学 | 3 | | 3 | 英语 | 6 | | 4 | 生物 | 6 | | 5 | 物理 | 8 | | 6 | 化学 | 5 | +-----+---------+------+ 6 rows in set (0.00 sec) mysql> SELECT * FROM students;//第二个表(students),包含学生(name),年龄(age),性别(sex),选课的第一门(cid1),选的第二门课(cid2),授课老师信息(tid)等信息 +-----+--------+-----+------+------+------+------+---------------------+ | sid | name | age | sex | cid1 | cid2 | tid | create_time | +-----+--------+-----+------+------+------+------+---------------------+ | 1 | tony | 18 | BOY | 2 | 4 | 3 | 2018-05-15 12:09:28 | | 2 | Cindy | 21 | GRIL | 3 | 6 | NULL | 2018-05-15 12:15:30 | | 3 | Alice | 19 | GRIL | 1 | NULL | NULL | 2018-05-15 13:11:37 | | 4 | Kobe | 25 | BOY | 11 | 1 | 2 | 2018-05-15 13:18:52 | | 5 | Tom | 19 | BOY | 4 | 3 | 7 | 2018-05-15 13:12:21 | | 6 | fsx | 24 | BOY | 1 | 3 | 9 | 2018-05-15 13:13:05 | | 7 | Qpy | 21 | GRIL | 3 | 1 | NULL | 2018-05-15 12:15:37 | | 8 | Coco | 27 | GRIL | 6 | 2 | 8 | 2018-05-15 12:15:38 | | 9 | Bob | 20 | BOY | 2 | 1 | NULL | 2018-05-15 12:15:53 | | 10 | Liming | 22 | BOY | 6 | 3 | 2 | 2018-05-15 12:13:28 | +-----+--------+-----+------+------+------+------+---------------------+ 10 rows in set (0.00 sec)
多表查询的连接方式:
交叉连接(笛卡尔乘积),如:SELECT * FROM tbl_name1,tbl_name2
,但是在实际中,不能这样简单的连接起来,如果两个表都特别大,这样下来,资源消耗太大,而且特别笨重
自然连接:将两张表上相同字段的值逐个比较,将等值关系保留下来
外连接:
左外连接:以左侧的表为基准,进行连接 left_tbl LEFT JOIN right_tbl ON ...
右外连接:以左侧的表为基准,进行连接 left_tbl RIGHT JOIN right_tbl ON ...
自连接:自己和自己连接
全外连接(mysql不支持)
1,显示每一个学生和选择的第一门课的课程名
自然连接方式:(students表中cid1和subjects表中cid相等的连接起来)
mysql> SELECT * FROM students,subjects WHERE students.cid1 = subjects.cid; +-----+--------+-----+------+------+------+------+---------------------+-----+---------+------+ | sid | name | age | sex | cid1 | cid2 | tid | create_time | cid | subject | tid | +-----+--------+-----+------+------+------+------+---------------------+-----+---------+------+ | 3 | Alice | 19 | GRIL | 1 | NULL | NULL | 2018-05-15 13:11:37 | 1 | 语文 | 4 | | 6 | fsx | 24 | BOY | 1 | 3 | 9 | 2018-05-15 13:13:05 | 1 | 语文 | 4 | | 1 | tony | 18 | BOY | 2 | 4 | 3 | 2018-05-15 12:09:28 | 2 | 数学 | 3 | | 9 | Bob | 20 | BOY | 2 | 1 | NULL | 2018-05-15 12:15:53 | 2 | 数学 | 3 | | 2 | Cindy | 21 | GRIL | 3 | 6 | NULL | 2018-05-15 12:15:30 | 3 | 英语 | 6 | | 7 | Qpy | 21 | GRIL | 3 | 1 | NULL | 2018-05-15 12:15:37 | 3 | 英语 | 6 | | 5 | Tom | 19 | BOY | 4 | 3 | 7 | 2018-05-15 13:12:21 | 4 | 生物 | 6 | | 8 | Coco | 27 | GRIL | 6 | 2 | 8 | 2018-05-15 12:15:38 | 6 | 化学 | 5 | | 10 | Liming | 22 | BOY | 6 | 3 | 2 | 2018-05-15 12:13:28 | 6 | 化学 | 5 | +-----+--------+-----+------+------+------+------+---------------------+-----+---------+------+ 9 rows in set (0.00 sec) //如果只想看到学生姓名和第一门选的课程,可以增加过滤条件 mysql> SELECT students.name,subjects.subject FROM students,subjects WHERE students.cid1 = subjects.cid; +--------+---------+ | name | subject | +--------+---------+ | Alice | 语文 | | fsx | 语文 | | tony | 数学 | | Bob | 数学 | | Cindy | 英语 | | Qpy | 英语 | | Tom | 生物 | | Coco | 化学 | | Liming | 化学 | +--------+---------+ 9 rows in set (0.00 sec)
注意,由于Kobe的cid1是11,而subjects表中cid没有11,则不显示。这就是说:自然连接只保留字段数据相等的行
显示同学信息,并且显示选修的第一门课的内容,如果选修的课不存在,则显示为NULL
//左外连接 mysql> SELECT stu.name,sub.subject FROM students AS stu LEFT JOIN subjects AS sub ON stu.cid1=sub.cid; +--------+---------+ | name | subject | +--------+---------+ | tony | 数学 | | Cindy | 英语 | | Alice | 语文 | | Kobe | NULL | | Tom | 生物 | | fsx | 语文 | | Qpy | 英语 | | Coco | 化学 | | Bob | 数学 | | Liming | 化学 | +--------+---------+ 10 rows in set (0.00 sec) //使用外连接,就可以显示所有左表内容,具体就是Kobe出来了,但是没有和有表cid对应的内容,则右表显示NULL //右外连接 //同样使用RIGHT JOIN是以右表为基准,则显示所有的右表内容,如果左表由不存在对应关系的,则显示NULL mysql> SELECT stu.name,sub.subject FROM students AS stu RIGHT JOIN subjects AS sub ON stu.cid1=sub.cid; +--------+---------+ | name | subject | +--------+---------+ | Alice | 语文 | | fsx | 语文 | | tony | 数学 | | Bob | 数学 | | Cindy | 英语 | | Qpy | 英语 | | Tom | 生物 | | NULL | 物理 | | Coco | 化学 | | Liming | 化学 | +--------+---------+ 10 rows in set (0.01 sec)
自连接:要求找到每一个students的第一门课程的授课老师,如果没有老师则显示为NULL
这就是在表students上使用cid1对应的tid,然后根据tid的内容再查找tid里面对应的name
mysql> SELECT s.name AS student,c.name AS teacher FROM students AS s LEFT JOIN students AS c ON s.tid=c.sid; //解释:s.name AS teacher 是给s.name起别名,也就是下面表中表头的student;teacher同理 //students AS s 是给s起别名,也就是s.name中的s;tudents AS c同理 +---------+---------+ | student | teacher | +---------+---------+ | tony | Alice | | Cindy | NULL | | Alice | NULL | | Kobe | Cindy | | Tom | Qpy | | fsx | Bob | | Qpy | NULL | | Coco | Coco | | Bob | NULL | | Liming | Cindy | +---------+---------+ 10 rows in set (0.00 sec)
子查询
仍然使用多表查询中的students
表和subjects
表
找出students
表中年龄大于平均年龄的同学信息
mysql> SELECT * FROM students WHERE age > (SELECT AVG(age) FROM students); +-----+--------+-----+------+------+------+------+---------------------+ | sid | name | age | sex | cid1 | cid2 | tid | create_time | +-----+--------+-----+------+------+------+------+---------------------+ | 4 | Kobe | 25 | BOY | 11 | 1 | 2 | 2018-05-15 13:18:52 | | 6 | fsx | 24 | BOY | 1 | 3 | 9 | 2018-05-15 13:13:05 | | 8 | Coco | 27 | GRIL | 6 | 2 | 8 | 2018-05-15 12:15:38 | | 10 | Liming | 22 | BOY | 6 | 3 | 2 | 2018-05-15 12:13:28 | +-----+--------+-----+------+------+------+------+---------------------+ 4 rows in set (0.00 sec) //一个查询语句中嵌套另一个查询语句;子查询的结果必须时单值才能和原查询语句中的查询条件匹配。也就是说,比较符号前后的值类型个数必须一样
一般情况下,可以在比较时使用子查询
在IN
中使用子查询
mysql> SELECT * FROM students WHERE age IN(SELECT age FROM students) ; +-----+--------+-----+------+------+------+------+---------------------+ | sid | name | age | sex | cid1 | cid2 | tid | create_time | +-----+--------+-----+------+------+------+------+---------------------+ | 1 | tony | 18 | BOY | 2 | 4 | 3 | 2018-05-15 12:09:28 | | 2 | Cindy | 21 | GRIL | 3 | 6 | NULL | 2018-05-15 12:15:30 | | 3 | Alice | 19 | GRIL | 1 | NULL | NULL | 2018-05-15 13:11:37 | | 4 | Kobe | 25 | BOY | 11 | 1 | 2 | 2018-05-15 13:18:52 | | 5 | Tom | 19 | BOY | 4 | 3 | 7 | 2018-05-15 13:12:21 | | 6 | fsx | 24 | BOY | 1 | 3 | 9 | 2018-05-15 13:13:05 | | 7 | Qpy | 21 | GRIL | 3 | 1 | NULL | 2018-05-15 12:15:37 | | 8 | Coco | 27 | GRIL | 6 | 2 | 8 | 2018-05-15 12:15:38 | | 9 | Bob | 20 | BOY | 2 | 1 | NULL | 2018-05-15 12:15:53 | | 10 | Liming | 22 | BOY | 6 | 3 | 2 | 2018-05-15 12:13:28 | +-----+--------+-----+------+------+------+------+---------------------+ 10 rows in set (0.00 sec)
FROM
中使用子查询
在一个暂时存在的表中查询,即FROM
后面跟的内容是一个暂时存在的表,从中选取某一条件合适的值。要给暂时存在的表起别名
mysql> SELECT name FROM (SELECT name,age FROM students) WHERE age > 20; ERROR 1248 (42000): Every derived table must have its own alias mysql> SELECT name FROM (SELECT name,age FROM students) AS t WHERE t.age>20; +--------+ | name | +--------+ | Cindy | | Kobe | | fsx | | Qpy | | Coco | | Liming | +--------+ 6 rows in set (0.00 sec)
UNION
关键字:将两个查询语句的结果(属性一致),联合起来输出
mysql> SELECT tname,age FROM teachers; +--------+-----+ | tname | age | +--------+-----+ | 张三 | 45 | | 李四 | 50 | | 王二 | 68 | +--------+-----+ 3 rows in set (0.00 sec) mysql> SELECT name,age FROM students; +--------+-----+ | name | age | +--------+-----+ | tony | 18 | | Cindy | 21 | | Alice | 19 | | Kobe | 25 | | Tom | 19 | | fsx | 24 | | Qpy | 21 | | Coco | 27 | | Bob | 20 | | Liming | 22 | +--------+-----+ 10 rows in set (0.00 sec) //使用UNION将两个查询结果放在一起输出 mysql> (SELECT tname,age FROM teachers) UNION (SELECT name,age FROM students); +--------+-----+ | tname | age | +--------+-----+ | 张三 | 45 | | 李四 | 50 | | 王二 | 68 | | tony | 18 | | Cindy | 21 | | Alice | 19 | | Kobe | 25 | | Tom | 19 | | fsx | 24 | | Qpy | 21 | | Coco | 27 | | Bob | 20 | | Liming | 22 | +--------+-----+ 13 rows in set (0.00 sec)
总结
这是是简单的介绍了查询中的一些简单使用,具体到实际生产中,灵活运用上述的查询方法,做到庖丁解牛,融会贯通还需要多加练习。