MYSQL 的基础查询语言——————DQL

一、DQL语言基本规则

①DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
②数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。查询返回的结果集是一张虚拟表。
③查询语句书写和执行顺序
书写:select -from- where- group by- having- order by-limit
执行:from - where -group by -having - select - order by-limit

二、建立数据库表格

student表
student.png
score表
score.png

三、DQL基本语法

查询关键字:SELECT

1、基本查询:
SELECT  *  FROM  student //查询student表的全部列
SELECT sno , sname FROM student //查询表格的某些列的全部信息
2、条件查询:
①select  *  from  student  where  class = 95033;

1.png
其中“=”可换成 =、!=、<>(不等于)、<、<=、>、>=;等符号
“*”可换成我们想要显示的某些列

②select * from student where sno in ( 107,109);//sno等于107,109的信息

2.png

其他条件查询

select * from student where sno  BETWEEN 107 AND 109;
select * from student where sno  IS NULL;
select * from student where sno  IS  NULL  and  sno=107;
select * from student where sno  IS  NULL  or  sno=107;
select * from student where sno  IS  not  NULL;
3、模糊查询
select * from student where sname like "王%";//以王开头的姓名

3.png

select * from student where sname like "%王%";//sanme中含有“王”字的信息
select * from student where sname like "_";//”_”表示单个字母
4、字段控制查询
(1) 去除重复记录
SELECT DISTINCT class FROM student;
(2) 相同类型字段可做运算,列名起别名,把NULL值换为0
SELECT  class+IFNULL(sno,0)  AS 小名 FROM student;//别名的AS可省略

4.png

(3)排序查询
SELECT * FROM student ORDER BY sno asc;//升序
SELECT * FROM student ORDER BY sno desc;//降序
SELECT * FROM student ORDER BY sno  desc , class  asc;//先sno降序,sno相同再按class升序
5、聚合函数(纵向运算)

COUNT():统计指定列不为NULL的记录行数;

SELECT count(1) FROM student ;
SELECT count(1) FROM student where sno=107;

MAX():计算指定列的最大值,如果指定列是字符串类型,使用字符串排序运算;

SELECT MAX(sno) FROM student ;

MIN():计算指定列的最小值,如果指定列是字符串类型,使用字符串排序运算;

SELECT MIN(sno) FROM student ;

SUM():计算指定列的数值和,如果指定列类型不是数值类型,计算结果为0;

SLECT SUM(sno) FROM student ;

AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

SELECT AVG(sno) FROM student ;
6、分组查询

1、凡和聚合函数同时出现的列名,则一定要写在group by 之后

SELECT class, count(1) FROM student group by class ;

2、对分组后限定的HAVING 子句

SELECT class, count(1) FROM student group by class HAVING count(1) >=2;

注:having与where的区别:
1.having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
2.having后面可以使用分组函数(统计函数) where后面不可以使用分组函数。
3.WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而 HAVING是对分组后数据的约束。

7、控制行数实现分页查询

若一页行数为10;

SELECT * FROM student LIMIT 0, 9;//从0行开始到第九行结束,为第一页数据。

四、多表查询
1、合并结果集(union , union all)

SELECT* FROM student UNION SELECT * FROM student;//去除重复数据
SELECT* FROM student UNION ALL SELECT * FROM student;//不去除重复数据
注:要合并的两表的列数、列类型必须相同。
2、连接查询
2.1内连接

特点:查询结果必须满足条件

SELECT * FROM student,score WHERE student.sno=score.sno ;(方言形式,可将*换成指定列)
SELECT * FROM student INNER JOIN score ON student.sno=score.sno ;(标准形式内连接)
2.2 外连接

特点:查询结果必须满足条件
①左连接是先查询出左表(以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示 NULL。

 SELECT * FROM student LEFT OUTER JOIN score ON student.sno=score.sno ;

②右连接就是先把右表中所有记录都查询出来,然后左表满足条件的显示,不满足显示NULL;

SELECT * FROM student RIGHT OUTER JOIN score ON student.sno=score.sno 
3、子查询

定义及形式:一个select语句中包含另一个完整的select语句。 子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句了。
子查询出现的位置:
a. where后,作为条为被查询的一条件的一部分;

SELECT * FROM score WHERE degree > (SELECT degree FROM score WHERE cno='3-245' and sno=103);

b. from后,作表;

SELECT count(1)  FROM  (SELECT sno FROM score WHERE cno='3-245')  test;

test为子查询表的别名。派生表必须有自己的别名;
c. 当子查询出现在where后作为条件且子查询形式为多行单列时,还可以使用如下关键字:

1.any
SELECT * FROM score WHERE sno = any(SELECT sno FROM score WHERE cno=’3-245’);
2.all
SELECT * FROM score WHERE degree< all(SELECT degree FROM score WHERE sno=103);

DQL语言到此告一段落,欲知其他内容,请听下回分解。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值