mysql的查询操作

mysql的查询操作

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)

离散取值查询的时候,我们可以使用列表,如:查找cid1 3subject

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)

总结

这是是简单的介绍了查询中的一些简单使用,具体到实际生产中,灵活运用上述的查询方法,做到庖丁解牛,融会贯通还需要多加练习。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值