mysql数据库分类之(DQL)查询表中的数据(3)

使用的图形化工具(下载地址):SQLyog
数据库分类:
1、DDL数据定义语言,用来定义数据库对象,表,列,关键字:drop,alter等
2、DML数据操作语言,用来对数据库中的表的数据进行增删改,关键字:insert,delete,update等
3、DQL数据查询语言,用来查询数据库中表的记录,关键字:select,where等
4、DCL数据控制语言,只做了解
DQL:查询表中的记录

1、基础查询

select * from 表名;

1、语法:

单表查询
select 
	字段列表 
from 
	表名列表 
where 
	多个条件 
group by
	分组字段
having
	分组之后的条件
order by
	分页限定

2、基础查询
(1)多个字段的查询

select 字段名。。。。 from 表名;
举例:
SELECT 	age,  #字段名
	math 
FROM student;	#表名

(2)去除重复
distinct
举例:

SELECT DISTINCT address FROM student;

此处注意的事,如果字符周围有空格,也会被认为不是同一的字符
(3)计算列
一般可以使用四则运算计算列的值,(一般只会进行数值型的计算)
ifnull(表达式1—):null参与的圆癣,计算结果都为null
举例:

SELECT NAME,math,english,math + english FROM student;

此处注意,如果这样写如果其中的一门成绩为null,则成绩的综合也为null
可以这样解决:

SELECT NAME,math,english,math + IDNULL(english,0) FROM student;

意思是如果英语成绩为null,则用0表示英语成绩进行相加
(4)起别名
用as其别名,但是as也可以省略不写

SELECT NAME,math,english,math + IDNULL(english,0) AS 总分 FROM student;

2、条件查询

1、where字句后跟条件,语法格式与计算机语言语法大致相同
(1)运算符的运用

select * from 表名 Where 限定查询的条件
*> < <= >= = <>
	<>SQL中表示不等于,在mysql中也可以使用 != 没有 ==
	举例:
		查询年龄大于60岁的人
	SELECT * FROM student WHERE age > 60;
		查询年龄等于20岁的人
	SELECT * FROM student WHERE age = 20;
		查询年龄小于20岁的人
	SELECT * FROM student WHERE age < 20;
		查询年龄不等于20岁的人
	SELECT * FROM student WHERE age != 20;
		查询年龄大于等于20,小于等于30的人
	SELECT * FROM student WHERE 20 <= age && 60 >= age;
或者 SELECT * FROM student WHERE 20 <= age and 60 >= age;

or这里就不解释了,是或的意思。

这样写可能有人会觉得很很麻烦,所以可以采用第二种方法,请往下看
(2)BETWEEN…AND查询

在一个范围内,如:between 100 AND 200 相当于条件在100200之间,包头有包尾
	举例:
	SELECT * FROM 表名 WHERE 字段名(列) BETWEEN 20 AND 30;
	但是需要注意,没有or这样的语法,如果BETWEEN or,没有这样的语法

(3)IN(集合)
如果指定查询,例如查询一个列表中的年龄为18,20岁的人的信息可以这样写

SELECT * FROM student WHERE age = 22 or age = 18;

这样写如果查询很多的指定条件,例如查询年龄为多个年龄段这样写有些麻烦,所以游乐INT集合查询:

SELECT * FROM student WHERE age IN (18,20);
集合表示多个值,使用逗号分隔

(4)模糊查询
IS NULL
查询某一列为null的值,注意:不能写=NULL
注意:null不可以使用=来进行判断,例如:

查询英语成绩为null
SELECT * FROM student WHERE english = NULL;(此处觉对会报错,)那如何进行判断那:
SELECT * FROM student WHERE english is NULL; 
查询英语成绩不为nullSELECT * FROM student WHERE age is NOT (55,67);

LIKE‘张%’
例如查询表中姓为张的人:

SELECT * FROM student WHERE NAME LIKE '张%';

查询姓名第二个字为“化”的人

SELECT * FROM student WHERE NAME LIKE "_化%";

#查询姓名是“三个字”的人

SELECT * FROM student WHERE NAME LIKE "___";

#查询姓名中含有“马”的人

SELECT * FROM student WHERE NAME LIKE "%马%"

3、排序查询

语法:order by 子句
	order by 排序字段1 排序方式1, 排序字段2,排序方式2.。。。。。。

举例:

SELECT * FROM 表名 ORDER BY 字段名;

排序方式:
1、升序排列(默认是升序排列)

SELECT * FROM 表名 ORDER BY 字段名 ASC;

2、降序排列

SELECT * FROM 表名 ORDER BY 字段名 DESC;

如果某一项是相同的,比如是两个人是相同的数学成绩,则可以根据英语成绩进行排列

SELECT * FROM student ORDER BY math ASC , English ASC;

注意:如果有多个排序条件,当前面的条件一样,则会判断第二个条件

4、聚合查询

含义:将一列数据作为一个整体,进行纵向的计算

1)COUNT:计算统计个数,
一般选择非空的列进行计算,例如:主键
使用COUNT(*),具体使用方法在下面
SELECT COUNT(字段名) FROM student;2)MAX:计算最大值
SELECT MAX(字段名) FROM student;3)min:计算最小值
SELECT MIN(字段名) FROM student;4)SUM:计算数据只和
SELECT SUM(字段名) FROM student;5)AVG:计算平均值
SELECT AVG(math) FROM student;

注意:聚合函数的计算,会排除null的值
解决方案:
1、选择不包含非空的列进行计算
2、使用IFNULL的函数
如果某一个字段的值为空可以这么写,将其替换为指定数值,例如0

SELECT COUNT(IFNULL(math,0)) FROM student;

3、将COUNT(*)这样写可以实现在一行中只要数据有一项不为空就可以被查询到

SELECT COUNT(*) FROM student;

但是牵扯到数据库的优化问题,一般不建议使用*的写法,

5、分组查询

语法:group by

举例:

SELECT 要分组的字段 , MAX(被用来分组的字段) FROM 表名 GROUP BY 要分组的字段;

分组之前还能对条件进行判断:

SELECT 要分组的字段 , MAX(被用来分组的字段) FROM 表名 WHERE 被用来分组的的字段的限定条件 GROUP BY 要分组的字段;

注意:
(1)分组之后查询的字段,分组字段,聚合函数

6、分页查询

约束
多表之间的关系
范式
数据库的备份

你可能感兴趣的:(数据库)