使用DQL命令查询数据(一)

一.指定查询字段

1.查询表中所有的数据列结果,采用“*”符号

select * from 表名

select All * from 表名

效果一样,都是查看整张表

2.可指定查询的结果数据列

select 表字段[表字段,....] from 表名

在这里插入图片描述
在这里插入图片描述

3.DISTINCT关键字的使用

作用:去掉SELECT查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条
在这里插入图片描述

在这里插入图片描述
语句之间的前后表字段都一致才能去重
在这里插入图片描述

4.AS子句

  • AS子句作用
  1. 可给数据列取一个新别名
  2. 可给表取一个新别名
  3. 可把经计算或总结的结果用另外一个新名称来代替
  • AS子句用法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    如区分连接查询时两个表有同名的字段
    在这里插入图片描述

注:

1.mysql 中的随机数(rand)

select rand();

2.想把小数转化为整数(round)

select round(rand()*70+30);

3.保留两位小数(round)

select round(rand()*70+30,2);

4.获得当前时间(datetime)

mysql> create table time( date datetime );
Query OK, 0 rows affected (0.00 sec)

mysql> insert into time values(now()),(now()),(now());
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from time;
+---------------------+
| date                |
+---------------------+
| 2021-02-25 17:22:35 |
| 2021-02-25 17:22:35 |
| 2021-02-25 17:22:35 |
+---------------------+
3 rows in set (0.00 sec)

5.where条件语句

  • 用于检索数据表中符合条件的记录
  • 搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假
  • 搜索条件的组成
  1. 逻辑操作符
  2. 比较操作符
    练习:查询在80-90分之间的所有成绩记录
select score from table result where between 80 and 90;

6.逻辑操作符(更推荐使用AND,OR,NOT,效率更高)

在这里插入图片描述

7.比较操作符

在这里插入图片描述
在这里插入图片描述

[a].BETWEEN AND范围查询

  • 根据一个范围值来检索
    在这里插入图片描述
  • 等同于 >= 和 <= 联合使用
    在这里插入图片描述

[b].Like模糊查询

在WHERE子句中,使用LIKE关键字进行模糊查询

  • 与“%”一起使用,表示匹配0或任意多个字符
  • 与“_”一起使用,表示匹配单个字符
    在这里插入图片描述

[c].使用IN进行范围查询

在WHERE子句中使用IN进行范围查询
在这里插入图片描述
查询的字段x的值,至少与括号中的一个值相同
多个值之间用英文逗号隔开
在这里插入图片描述

[d].NULL空值条件查询

  • NULL代表“无值”
  • 区别于零值0和空符串“”
  • 只能出现在定义允许为NULL的字段
  • 须使用 IS NULL 或 IS NOT NULL 比较操作符去比较

8.练习

查询所有姓“李”的学生所有成绩

mysql> select stu_id "李同学学号" ,score"李同学成绩"  from student where stu_name like "李%";
+-----------------+-----------------+
| 李同学学号      | 李同学成绩      |
+-----------------+-----------------+
|               1 |             100 |
|              10 |            NULL |
|              11 |            NULL |
+-----------------+-----------------+
3 rows in set (0.00 sec)

二.表关系

1.关联查询

a.内连接 ( inner join,inner可以省略)

  • 会展示两表关联上的所有数据
  • 等值和非等值的连接查询
  • 自身连接查询

b.外连接 ( out join )

  • 左连接(LEFT JOIN)
    会展示左表所有数据,右表展示关联上的所有数据,未关联上的以null值填充
  • 右连接 ( RIGHT JOIN)
    会展示右表所有数据,左表展示关联上的所有数据,未关联上的以null值填充

c.全连接(union,mysql15.8之后才支持full join)

相当于左连接 union all 右连接
union 和union all 的区别:
两个表的列相同的情况下:使用union all 会把数据纵向拼接起来
使用union是在union all的基础上去重

select 查询字段,... fromjoin 要关联的表 on 等价条件 [ join 要关联的表 on 等价条件] [where 条件语句]

在这里插入图片描述

d.练习

【1】现在有三张表,现在我想看到一张表上有每个人的姓名,班级,成绩
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

mysql> select stu.name,c.class_id,s.score from test_stu stu join test_class c on stu.id=c.id join test_score s on stu.id=s.id;
+-----------+----------+-------+
| name      | class_id | score |
+-----------+----------+-------+
| 李易峰    |        1 |    90 |
| 刘昊然    |        1 |    92 |
| 王一博    |        2 |    83 |
| 陈伟霆    |        2 |    80 |
| 王嘉尔    |        3 |    90 |
| 鹿晗      |        3 |    88 |
+-----------+----------+-------+
6 rows in set (0.00 sec)

【2】.现在在学生表中加入一行数据,班级表不变,要求一张表上有学生姓名和学生班级,要求是所有学生姓名
在这里插入图片描述
在这里插入图片描述

mysql> select stu.name,c.class_id from test_stu stu left join test_class c on stu.id=c.id;
+-----------+----------+
| name      | class_id |
+-----------+----------+
| 李易峰    |        1 |
| 刘昊然    |        1 |
| 王一博    |        2 |
| 陈伟霆    |        2 |
| 王嘉尔    |        3 |
| 鹿晗      |        3 |
| 吴世勋    |     NULL |
+-----------+----------+
7 rows in set (0.00 sec)

【3】.现在分数表中插入了两行数据,现在要求一张表上有学生姓名和分数,要求是展现所有分数
在这里插入图片描述
在这里插入图片描述

mysql> select stu.name,s.score from test_stu stu right join test_score s on stu.id=s.id;
+-----------+-------+
| name      | score |
+-----------+-------+
| 李易峰    |    90 |
| 刘昊然    |    92 |
| 王一博    |    83 |
| 陈伟霆    |    80 |
| 王嘉尔    |    90 |
| 鹿晗      |    88 |
| 吴世勋    |    90 |
| NULL      |   100 |
+-----------+-------+
8 rows in set (0.00 sec)

【4】.现在班级表上也新增了一行数据,要求一张表上有所有学生的姓名和所有班级
在这里插入图片描述
在这里插入图片描述

mysql>  select stu.name,c.class_id from test_stu stu left join test_class c on stu.id=c.id   union select stu.name,c.class_id from test_stu stu right join test_class c on stu.id=c.id;
+-----------+----------+
| name      | class_id |
+-----------+----------+
| 李易峰    |        1 |
| 刘昊然    |        1 |
| 王一博    |        2 |
| 陈伟霆    |        2 |
| 王嘉尔    |        3 |
| 鹿晗      |        3 |
| 吴世勋    |     NULL |
| NULL      |        3 |
+-----------+----------+
8 rows in set (0.00 sec)

2.自联查询

mysql> select * from category;
+------------+-----------------+------+
| categoryid | category_name   | pid  |
+------------+-----------------+------+
|          1 | 软件开发        |    0 |
|          2 | 美术设计        |    0 |
|          3 | 数据库基础      |    1 |
|          4 | PhotoShop基础   |    2 |
|          5 | 色彩搭配学      |    2 |
|          6 | PHP基础         |    1 |
|          7 | 一起学java      |    1 |
+------------+-----------------+------+
7 rows in set (0.00 sec)

mysql> select a.category_name 父栏目名称,b.category_name 子栏目名称 from category a join category b on b.pid=a.categoryid;
+-----------------+-----------------+
| 父栏目名称      | 子栏目名称      |
+-----------------+-----------------+
| 软件开发        | 数据库基础      |
| 美术设计        | PhotoShop基础   |
| 美术设计        | 色彩搭配学      |
| 软件开发        | PHP基础         |
| 软件开发        | 一起学java      |
+-----------------+-----------------+

猜你喜欢

转载自blog.csdn.net/nayomi927/article/details/114067649
今日推荐