结构化查询语言(Structured Query Language):是一种非凡目标的编程语言,是一种数据库查问和程序设计语言,用于存取数据以及查问、更新和治理关系数据库系统。
数据查询语言(DQL):SELECT(查问)
数据操作语言(DML):INSERT(插入)、UPDATE(批改)、DELETE(删除)
一、常见的MySql的数据类型:
文本:varchar、text、longtext
数字:int、tinyint、bigint、float、double
日期:date(2021-07-15)、datetime(2021-11-03 15:31:05)
二、SQL常见语法
1、训练数据集,共四个表文件Course、Student、Score、Teacher
2、INSERT语法:在表文件中插入数据
INSERT INTO 表名称 VALUES(值1,值2,……);
INSERT INTO 表名称(列1,列2,……)
VALUES(值1,值2,……),(值1,值2,……),……;
注:关键字之间要有空格,如果不是多条语句同时执行,语句后的分号(;)能够省略
3、DELETE语法:删除表文件中局部数据
DELETE FROM 表名称
(WHERE 列名称 = 值)
4、UPDATE语法:批改表文件中数据
UPDATE 表名称
SET 列名称1 = 新值,
列名称2 = 新值,
……
WHERE 列名称 = 某值
5、SELECT语法:查问语句
整体语法:SELECT 列名称1 AS 列1,
列名称2 AS 列2,
……
FROM 表名称
(WHERE 列名称 = 某值
ORDER BY 列名称 ASC/DESC
LIMIT 数字1,数字2 )
示例:
SELECT s_id AS ‘学号’,
s_name,
s_birthday,
s_sex
FROM student
WHERE s_id < 5
6、WHERE条件
(1)AND 和 OR
AND 和 OR 可在 WHERE 子语句中把两个或多个条件联合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只有有一个成立,则 OR 运算符显示一条记录。
示例:
查问生日为1993年3月5日的男学生的信息:
SELECT s_id,s_name,s_birthday,s_sex
FROM student
WHERE s_sex = ‘男’ AND s_birthday = ‘1993-03-05’
查问生日为1993年3月5日或者性别为男的学生的信息:
SELECT s_id,s_name,s_birthday,s_sex
FROM student
WHERE s_sex = ‘男’ OR s_birthday = ‘1993-03-05’
(2)LIKE(含糊查问)
通配符:
% :代替 0 个或多个字符
_ :代替一个字符
示例:
查问姓李的学生的信息:
SELECT s_id,s_name,s_birthday,s_sex
FROM student
WHERE s_name LIKE ‘李%’
查问生日为1993年3月5日且姓李的学生的信息:
SELECT s_id,s_name,s_birthday,s_sex
FROM student
WHERE s_name LIKE ‘李%’ AND s_birthday = ‘1993-03-05’
查问姓名为两个字且姓为王的学生的信息:
SELECT s_id,s_name,s_birthday,s_sex
FROM student
WHERE s_name LIKE ‘王_’
(3)BETWEEN …… AND ……
BETWEEN … AND 会选取介于两个值之间的数据范畴。这些值能够是数值或者日期。
示例:
查问s_id在3到6之间的学生的信息:
SELECT s_id,s_name,s_birthday,s_sex
FROM student
WHERE s_id BETWEEN 3 AND 6( 蕴含3和6)
查问生日在1993年1月1日到1993年12月31日之间的学生信息:
SELECT s_id,s_name,s_birthday,s_sex
FROM student
WHERE s_birthday BETWEEN ‘1993-01-01’ AND ‘1993-12-31’
(4)<,>,<>,>=,<=
< 小于
> 大于
<>(!=) 不等于
>= 大于等于
<= 小于等于
查问s_id在3到6之间的学生的信息:
SELECT s_id,s_name,s_birthday,s_sex
FROM student
WHERE s_id >=3 AND s_id <=6
(5)IN
查问s_id在3到6之间的学生的信息:
SELECT s_id,s_name,s_birthday,s_sex
FROM student
WHERE s_id IN (3,4,5,6)
综上,查问s_id在3到6之间的学生信息共列举了三种取值条件,输入后果均雷同。
7、多表查问—LEFT JOIN…… ON…… 和 RIGHT JOIN…… ON ……
LEFT JOIN:从左表 (table_name1) 那里返回所有的行,即便在右表 (table_name2) 中没有匹配的行
RIGHT JOIN:与LEFT JOIN 相同,会从右表 (table_name2) 那里返回所有的行,
即便在左表 (table_name1) 中没有匹配的行。
示例1:同时查问score及student两个表的数据,保留score全副行
(1)SELECT student.s_id,student.s_name,score.c_id,score.s_score
FROM score
LEFT JOIN student
ON score.s_id = student.s_id
(2)SELECT student.s_id,student.s_name,score.c_id,score.s_score
FROM student
RIGHT JOIN score
ON score.s_id = student.s_id
示例2:查问c_id为1的学生的问题和科目名称
SELECT b.s_id,b.s_name,a.c_name,b.s_score
FROM course a RIGHT JOIN (
SELECT student.s_id,student.s_name,score.c_id,score.s_score
FROM score
LEFT JOIN student
ON score.s_id = student.s_id WHERE c_id = 1) b
ON a.c_id = b.c_id
8、ORDER BY—排序
依据某一列的信息进行正序或倒序排序默认
ASC:从小到大排序(升序排列),个别能够省略
DESC:从大到小排序(降序排列)
示例:依照生日正序排序:
SELECT *
FROM student
ORDER BY s_birthday (ASC)
依照生日倒序排序:
SELECT *
FROM student
ORDER BY s_birthday DESC
9、LIMIT—分页
LIMIT num1,num2:
从num1开始,num1最小为0,查问num2条数据
如果从头开始,第一个数字能够省略
示例:依照生日正序排序查问前三人的信息:
SELECT * FROM student ORDER BY s_birthday LIMIT 3
SELECT * FROM student ORDER BY s_birthday LIMIT 0,3
依照生日倒序排序取第三个人到第五个人的信息:
SELECT *
FROM student
ORDER BY s_birthday DESC LIMIT 2,3
10、罕用数学函数
COUNT():求数量
SUM():求和
AVG():求平均值
MAX():求最大值
MIN():求最小值
示例:求加入课程号为2的学生数量:
SELECT COUNT(*)
FROM score
WHERE c_id =2
求课程号为2的问题总分:
SELECT SUM(s_score)
FROM score
WHERE c_id =2
求课程号为2的平均分:
SELECT AVG(s_score)
FROM score
WHERE c_id =2
求课程号为2的最高分:
SELECT MAX(s_score)
FROM score
WHERE c_id =2
求课程号为2的最低分:
SELECT MIN(s_score)
FROM score
WHERE c_id =2
GROUP BY:联合聚合函数,依据一个或多个列对后果集进行分组
HAVING:HAVING 子句能够让咱们筛选分组后的各组数据
SELECT 列名称1 AS 列1,
列名称2 AS 列2,
……
FROM 表名称
(WHERE 列名称 = 某值)
GROUP BY 列名称1
HAVING 条件
示例:获取每个科目的平均分:
SELECT c_id,AVG(s_score)
FROM score
GROUP BY c_id
获取平均分在66分以上的科目ID和平均分:
SELECT c_id,AVG(s_score)
FROM score
GROUP BY c_id
HAVING AVG(s_score)>66
11、罕用日期函数
NOW():以后日期和工夫
CURDATE():以后日期
CURTIME():以后工夫
DATE_FORMAT(date,format):工夫格式化
SELECT DATE_FORMAT(NOW(), ‘%Y-%m-%d %H:%i:%s’)
SELECT DATE_FORMAT(NOW(), ‘%Y/%m/%d %H:%i:%s’)
SELECT DATE_FORMAT(NOW(), ‘%Y年%m月%d日 %H:%i:%s’)
三、注意事项
1、关键字不辨别大小写,包含SELECT等价于select,LIKE等价于like,COUNT()等价于count()
2、所有的符号都是英文符号,包含不限于:, ( ) ; % ! ‘ “
3、文本和日期类型的数据,前后须要加单引号,比方 …… WHERE s_sex = ‘男’
4、别名:字段取别名时能够加AS或者不加,以空格距离,表名取别名时只能以空格距离
发表回复