文章目录
SQL高级教程
一、关于查询
1.模糊查询
基础查询使用逻辑运算符查询,模糊查询就是使用比较运算符进行查询。
| 运算符 | 描述 |
|---|---|
| IS NULL | 查询结果是否为空 |
| IS NOT NULL | 查询结果是否为非空 |
| LIKE | a like b 查询a 是否匹配 b |
| BETWEEN | a between b and c 查询a 是否在b~c之间 |
| IN | a in(a1,a2,a3…)查询a是否在a1,a2,a3…其中某个值中 |
使用 LIKE 结合 %(代表0到任意字符) _(一个字符)
先新建一个表并且插入数据
CREATE TABLE `student` (
`StudentId` INT(6) NOT NULL AUTO_INCREMENT COMMENT '学生id',
`StudentName` VARCHAR(6) NOT NULL COMMENT '学生姓名',
`StudentAge` INT(6) NOT NULL COMMENT '学生年龄',
PRIMARY KEY(`StudentId`)
)ENGINE=INNODB DEFAULT CHARSET = utf8;
INSERT INTO `student`(`StudentId`,`StudentName`,`StudentAge`)VALUES('001','张三','12'),('002','李四','34'),('003','王五','52'),('004','赵六','72')

新建查询 查询学生姓名里包含“五”的信息
新建查询 查询学生姓名里包含“五”的信息
SELECT *FROM student WHERE StudentName LIKE "%五";

新建查询 查询学生姓名里张姓双字名称的信息
SELECT *FROM student WHERE StudentName LIKE "张_";

2.高级查询
(1)连表查询(内连接实现)
通过多个表中的 相同字段去查询不同表中的数据。
在一个查询中从不同的表返回结构数据; 有外联,内联…
创建一个学生科目表 和 学生成绩表
-- 学生信息表
CREATE TABLE `project` (
`StudentId` INT(6) NOT NULL AUTO_INCREMENT COMMENT '学生id',
`Project` VARCHAR(6) NOT NULL COMMENT '学生科目',
PRIMARY KEY(`StudentId`)Id
)ENGINE=INNODB DEFAULT CHARSET = utf8;
--
INSERT INTO subject(`Subject`)VALUES('新闻学'),('社会学'),('科学'),('法学'),('数学')
-- -- 学生成绩表
CREATE TABLE `result` (
`Id` INT(6) NOT NULL AUTO_INCREMENT COMMENT '普通id',
`Project` VARCHAR(6) NOT NULL,
`Result` INT(6) NOT NULL COMMENT '学生成绩',
PRIMARY KEY(`Id`)
)ENGINE=INNODB DEFAULT CHARSET = utf8;
INSERT INTO result(`Subject`,`Result`)VALUES('新闻学',23),('社会学',54),('科学',98),('法学',78),('数学',23)
通过内连接查询学生表中的学生Id 和学生姓名,学生信息表中的学生科目,学生成绩表中的学生成绩。
查看表关系就知道 学生表与学生信息表有相同属性“学生Id” 学生信息表与学成绩表有相同属性“学生科目”
通过以上条件可连接这三个表查询:
-- 注意使用别名 避免数据混淆
SELECT s.StudentId,sub.`Project`,`Result`,StudentName
FROM `student` AS s
INNER JOIN `subject` AS sub
ON s.`StudentId` = sub.StudentId
INNER JOIN `result` AS r
on sub.`Project` = r.`Project`

这样就通过内连接 查询了三个表中的数据。
(2)多表查询
SQL UNION 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
注意:UNION 命令只会选取不同的值 。 使用UNION ALL 才能够选取相同的值。
SELECT StudentName FROM student
UNION
SELECT Result FROM result

UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
二、SQL常用函数
1.数学函数
| SELECT CEILING(9.4) | 向上取整 |
|---|---|
| SELECT ABS(-8) | 取绝对值 |
| SELECT FLOOR() | 向下取整 |
| SELECT RAND() | 返回一个0~1之间的随机数 |
| SELECT SIGH(10) | 判断一个数的符号 ,负数返回 -1, 正数返回 1 |
2.字符串函数
| SELECT CHAR_LENGTH(‘这是一行字’) | 返回字符串长度 |
|---|---|
| SELECT CONCAT(‘我’,‘爱’,‘你’) | 拼接字符串 |
| SELECT INSERT(‘我爱编程’ ,1,2,‘超级热爱’) | 在1的位置 替换调2个字符串 |
| SELECT LOWER(‘xiaoyang’) | 字符串小写 |
| SELECT UPPER(‘XIAOYANG’) | 字符串大写 |
| SELECT REPLACE(‘我坚持学习编程!’,‘坚持’,‘努力’) | 替换指定字符串 |
| SUBSTR(‘我十分喜欢编程啦啦啦啦啦’,4,6) | 从第4位开始截取6个字符串 |
| REVERSE(‘这是字符串’) | 字符串反转 |
3.时间日期函数
| SELECT CURRENT_DATE() | 获取当地日期 |
|---|---|
| SELECT CURDATE() | 获取当地日期 |
| SELECT NOW() | 获取当前时间 |
| SELECT LOCALTIME() | 本地时间 |
| SELECT SYSDATE() | 系统时间 |
| SELECT YEAR(NOW()) | 年 |
| SELECT MONTH(NOW()) | 月 |
| SELECT DAY(NOW()) | 日 |
| SELECT HOUR(NOW()) | 时 |
| SELECT MINUTE(NOW()) | 分 |
| SELECT SECOND(NOW()) | 秒 |
4.系统函数
| SELECT USER() | 系统用户 |
|---|---|
| SELECT VERSION() | 系统版本 |
5.聚合函数(常用)
| COUNT() | 总数 |
|---|---|
| SUM() | 总和 |
| AVG() | 平均数 |
| MAX() | 最大值 |
| MIN() | 最小值 |
COUNT(1) COUNT(*) 用法一样
COUNT(字段) 会忽略所有的NULL值