使用的图形化工具(下载地址):SQLyog
数据库分类:
1、DDL数据定义语言,用来定义数据库对象,表,列,关键字:drop,alter等
2、DML数据操作语言,用来对数据库中的表的数据进行增删改,关键字:insert,delete,update等
3、DQL数据查询语言,用来查询数据库中表的记录,关键字:select,where等
4、DCL数据控制语言,只做了解
DQL:查询表中的记录
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;
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 相当于条件在100到200之间,包头有包尾
举例:
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;
查询英语成绩不为null:
SELECT * 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 "%马%";
语法: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;
注意:如果有多个排序条件,当前面的条件一样,则会判断第二个条件
含义:将一列数据作为一个整体,进行纵向的计算
(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;
但是牵扯到数据库的优化问题,一般不建议使用*的写法,
语法:group by
举例:
SELECT 要分组的字段 , MAX(被用来分组的字段) FROM 表名 GROUP BY 要分组的字段;
分组之前还能对条件进行判断:
SELECT 要分组的字段 , MAX(被用来分组的字段) FROM 表名 WHERE 被用来分组的的字段的限定条件 GROUP BY 要分组的字段;
注意:
(1)分组之后查询的字段,分组字段,聚合函数
约束
多表之间的关系
范式
数据库的备份