SQL高级教程

发布于:2022-11-27 ⋅ 阅读:(370) ⋅ 点赞:(0)


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值


微信公众号

今日签到

点亮在社区的每一天
去签到