使用DQL命令查询数据(总篇1~3)

目录

DQL语言

什么是查询

010

司马坡

新疆喀什

S201

SELECT语法

SELECT应用案例

WHERE条件

逻辑运算符

比较运算符

NULL空值条件查询

BETWEEN AND范围查询

LIKE模糊查询

使用IN进行范围查询

MySQL中的函数

MySQL中的聚合函数

MySQL中常用的数学函数

MySQL中常用的字符串函数

MySQL中常用的日期时间函数

 ORDER BY 子句

 LIMIT 子句

EXISTS 子查询

子查询注意事项

多表连接查询

内连接

左外连接

右外连接

不同的SQL JOIN对比


DQL语言

DQL(Data Query Language 数据查询语言):用于查询数据库对象中所包含的数据。
DQL语言主要的语句:SELECT语句。
DQL语言是数据库语言中最核心、最重要的语句,也是使用频率最高的语句。
查询的主要类型:简单的单表查询或多表的复杂查询和子查询

什么是查询

查询产生一个虚拟表。
看到的是表形式显示的结果,但结果并不真正存储。
每次执行查询只是从数据表中提取数据,并按照表格的形式显示出来。

SELECT * FROM 表名


SELECT * FROM `student` WHERE 所在班级 = 'S202'

学生编号

学生姓名

地址

所在班级

……

001

张明全

湖南长沙

S201

002

李菲

湖北宜昌

S202

003

于寄谦

甘肃天水

S204

004

刘国正

山东荷泽

S201

005

周杰伦

台湾新竹

S204

006

巩小妹

香港龙湾

S203

007

巩大妹

香港龙湾

S203

008

张明敏

北京顺义

S202

009

矛十八

四川棉阳

S204

010

司马坡

新疆喀什

S201

SELECT语法

SELECT   [ALL | DISTINCT]
{  * |  table.* | [ table.field1 [ as  alias1] [, table.field2 [as  alias2]][, …]] }
FROM  table_name  [ as  table_ alias  ]
    [ left|out|inner  join  table_name2 ]    #多表连接查询
    [ WHERE  … ]       #指定结果需满足的条件
    [ GROUP BY …]    #指定结果按照哪几个字段来分组
    [ HAVING …]    #过滤分组的记录必须满足的次要条件
    [ ORDER BY… ]    #指定查询记录按一个或者多个条件排序
    [ LIMIT  {   [ offset,] row_count    |   row_count OFFSET offset   }] ;  #分页查询

[ ]   括号代表可选的;                                                                                       
{ }   括号代表必须的;
#    MySQL语句中的注释符,也可以用   /*该处为注释*/

SELECT应用案例

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

SELECT * FROM 表名

2.查询表中指定列的数据。

SELECT   字段名1,字段名2,…字段名n   FROM 表名

查询全部行和列或指定列的数据


3.在查询中使用别名,使用“AS”关键字。
可给数据列取一个新别名
可给表取一个新别名
可把经计算或总结的结果用另外一个新名称来代替

SELECT   field1 [ AS  alias1] [,field2 [AS  alias2]] […,fieldn [AS  aliasn]]
FROM  table_name  [ AS  table_ alias  ];

4.在查询中使用常量列:如果需要将一些常量的默认信息添加到输出结果中,以方便统计或计算。可以使用常量列。

SELECT  studentno AS “学号”, studentname AS “姓名”,
phone AS “手机号”,address AS “家庭住址”,
‘郑州翔天信鸽’ AS “学校名称”
FROM student;

5.DISTINCT关键字的使用:去掉SELECT查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条。

SELECT   DISTINCT field1 [ AS  alias1] [,field2 [AS  alias2]] […,fieldn [AS  aliasn]]
FROM  table_name  [ AS  table_ alias  ];

WHERE条件

WHERE条件:用于检索数据表中符合条件的记录
搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假
搜索条件的组成
逻辑操作符
比较操作符

逻辑运算符

比较运算符

数值数据类型的记录之间才能进行算术运算
相同数据类型的数据之间才能进行比较

NULL空值条件查询

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

SELECT  字段1,字段2 ,…FROM 表名 WHERE   字段x  IS  NULL

查找地址不为空的学生信息

BETWEEN AND范围查询

BETWEEN AND范围查询:根据一个范围值来检索
等同于 >= 和 <= 联合使用

SELECT  字段1,字段2 ,…FROM 表名 WHERE   字段x  BETWEEN  值1 AND  值2 
#查询课程表中课时在110和120之间的所有记录
 SELECT * FROM subject WHERE classhour BETWEEN  110 AND 120;
#等同于:
 SELECT * FROM subject WHERE classhour >= 110 AND classhour <=120;

LIKE模糊查询

在WHERE子句中,使用LIKE关键字进行模糊查询
与“%”一起使用,表示匹配0或任意多个字符
与“_”一起使用,表示匹配单个字符

#查询包含“数学”的所有课程
SELECT   *  FROM subject WHERE SubjectName  LIKE  "%数学%";
#查询所有姓名为“李**”三个字的学生信息
SELECT  StudentNo,StudentName FROM student  
WHERE StudentName LIKE "李__";

使用IN进行范围查询

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

SELECT  字段1,字段2 ,…FROM 表名 WHERE   字段x  IN  ( 值1,值2,值3…值n) 
SELECT  *  FROM  subject  where    ClassHour = 100  OR ClassHour =110 OR ClassHour  = 120;  #普通处理方式
SELECT  *  FROM  subject  where ClassHour  IN ( 100, 110,120 );
#使用IN进行查询方式,更为简洁,效率更高

MySQL中的函数

MySQL的函数
MySQL中的函数将一些常用的处理数据的操作封装起来,这样大大简化了程序员的工作,提高了开发效率。
因此,除了会使用SQL语句之外,还需要掌握一些常用函数。


MySQL中常用的函数
聚合函数
字符串函数
日期时间函数
数学函数

MySQL中的聚合函数

MySQL中常用的数学函数

MySQL中常用的字符串函数

MySQL中常用的日期时间函数

 ORDER BY 子句

ORDER BY子句:实现按一定顺序显示查询结果。
排序可以是升序(ASC)或者降序(DESC),如果不指定ASC或DESC,结果集默认按ASC升序排序。

#把成绩都降低10%后加5分,再查询及格成绩,并按照成绩从高到低排序。
SELECT studentno AS 学生编号,(studentresult*0.9+5 ) AS 综合成绩
FROM `result`
WHERE (`studentresult`*0.9+5) >=60
ORDER BY studentresult DESC;

在上个案例中,如果要在学生成绩排序的基础上,再按照课程编号进行排序。怎么办?

#把成绩都降低10%后加5分,再查询及格成绩,并按照成绩从高到低排序,如果成绩
#相同,再按照课程编号进行排序。
SELECT studentno AS 学生编号,(studentresult*0.9+5 ) AS 综合成绩
FROM `result`
WHERE (`studentresult`*0.9+5) >=60
ORDER BY studentresult DESC,subjectno;

 LIMIT 子句

LIMIT 子句:MySQL查询语句中使用LIMIT子句限制结果集

#查询课程编号为1的,考试日期为2019年的考试的前5名同学的学号和成绩
#应用1:限制显示的结果集的行数(小说排行榜  新闻只显示最新的5条)
SELECT studentno,studentresult 
FROM result
WHERE subjectno=1 AND YEAR(examdate)=2019
ORDER BY studentresult DESC
LIMIT 5

 

EXISTS 子查询

EXISTS 子查询:带有EXISTS的子查询不返回任何记录的数据,只返回逻辑值“True”或“False”。

SELECT …… FROM 表名 WHERE EXISTS(子查询);

子查询有返回结果: EXISTS子查询结果为TRUE,执行外层查询;
子查询无返回结果: EXISTS子查询结果为FALSE,   外层查询不执行;

子查询注意事项

任何允许使用表达式的地方都可以使用子查询
嵌套在父查询SELECT语句的子查询可包括
SELECT子句
FROM子句
WHERE子句
GROUP BY子句
HAVING子句
只出现在子查询中而没有出现在父查询中的列不能包含在输出列中

多表连接查询

多表连接查询是通过各个表之间共同列的关联性(例如:外键)来查询的。
多表连接查询的分类
内连接(INNER JOIN) ,可简写为 JOIN;
左外连接(LEFT OUTER JOIN),可简写为LEFT JOIN;
右外连接(RIGHT OUTER JOIN),可简写为RIGHT JOIN;
自连接查询;
交叉连接(CROSS JOIN)也称为 笛卡儿乘积连接,基本上用不到。

内连接

内连接:内连接使用比较运算符根据每个表的通用列中的值匹配两个表中的行。

#第一种写法
SELECT   字段列表   FROM   表1  INNER JOIN  表2
ON    表1.通用字段名=表2.通用字段名

#第二种写法
SELECT   字段列表 FROM   表1 ,表2
WHERE    表1.通用字段名=表2.通用字段名

如果两个表中有相同的字段名,必须在列名前加表名。否则将出现 错误代码:1052 Column 'studentno' in field list is ambiguous

左外连接

#左外连接
SELECT   字段列表   FROM   表1  LEFT JOIN  表2
ON    表1.通用字段名=表2.通用字段名

左外连接:左表(表1)的记录将会全部表示出来,而右表(表2)只会显示符合匹配条件的记录。
1.匹配,返回到结果集
2.无匹配,NULL值返回到结果集

右外连接

#右外连接
SELECT   字段列表   FROM   表1  RIGHT JOIN  表2
ON    表1.通用字段名=表2.通用字段名

右外连接:右表(表2)的记录将会全部表示出来,而左表(表1)只会显示符合匹配条件的记录。
1.匹配,返回到结果集
2.无匹配,NULL值返回到结果集

不同的SQL JOIN对比

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值