上一篇写的是SQL Server的基础语言,这一篇文章讲的是SQL Server的高级语言。
SQL Server 高级言语学习
LIKE – 模糊查询
LIKE 语法是用来进行对表的模糊查询。
语法:
SELECT 列名/(*) FROM 表名称 WHERE 列名称 LIKE 值;
实例:
我们用上一节所用的"Student"学生表来进行演示。
1、现在我们要查询"Student"学生表中的姓名"王"开头的同学。
select * from student where StuName like '王%'
可以看出我们有两个一样的数据。
2、我们也可以查询"Student"学生表中的姓名带五的同学信息。
select * from student where StuName like '%五'
3、接下来我们查询一下,出生日期中带3的同学信息。
select * from student where StuBir like '%3%'
可以看出查询出来的同学,出生日期都是带数字3的。
4、通过使用 NOT 关键字,我们可以从"Student"学生表中选取出生日期不带数字3的同学信息
select * from student where StuBir not like '%3%'
可以看到都是出生日期不带数字3的同学。
温馨提示:“%” 是用于匹配多个字符的,"_"是用于匹配单个字符的。
IN – 查找多个值
IN 关键字允许我们在 WHERE 子句中规定多个值。
语法:
SELECT 列名/(*) FROM 表名称 WHERE 列名称 IN (值1,值2,值3);
实例:
现在我们查询"Student"学生表中数学成绩为"80"和"60"的同学信息。
SELECT * FROM student WHERE Math IN ('80','60');
可以看出上表的数学成绩只有 "80"和"60"的同学信息。
BETWEEN – 查询区间数据
BETWEEN … AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
语法:
SELECT 列名/(*) FROM 表名称 WHERE 列名称 BETWEEN 值1 AND 值2;
实例:
1、查询"Student"学生表中数学成绩在"75"和"80"之间的同学信息
SELECT * FROM student WHERE math BETWEEN '75' AND '80';
2、查询上述结果相反的结果,可以使用 NOT:
SELECT * FROM student WHERE math NOT BETWEEN '75' AND '80';
温馨提示:BETWEEN … AND两边都是包含的相当于<=和>=。
AS – 别名
通过使用 SQL Server,可以为列名称和表名称指定别名(Alias),别名使查询程序更易阅读和书写。
语法:
表别名:
SELECT 列名称/(*) FROM 表名称 AS 别名;
列别名:
SELECT 列名称 as 别名 FROM 表名称;
实例:
使用表名称别名:
SELECT s.StuName, s.StuSex
FROM Student s
WHERE s.StuName='张三' AND s.StuSex='男';
使用列名别名:
SELECT StuName as sName, StuSex as sSex FROM student;
可以看到查询出来的列名变为我们自己定义的名字了。
温馨提示:在实际用中,AS关键字可以省略的哟。
JOIN – 多表关联
JOIN 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。
数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。
语法:
select 列名
from 表A
INNER|LEFT|RIGHT|FULL JOIN 表B
ON 表A主键列 = 表B外键列;
不同的 SQL JOIN:
下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。
- JOIN: 如果表中有至少一个匹配,则返回行
- INNER JOIN: 内部连接,返回两表中匹配的行
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
实例:
我们来查询"Student"学生表中的学生姓名和班级,再查询第二张"StuInfo"学生信息表中的学生电话,在根据班级进行升序排序。
SELECT s.StuName,s.Classes,si.StuPhone
FROM student s
INNER JOIN StuInfo si
ON s.StuNo = si.StuNo
order by Classes asc
UNION – 合并结果集
UNION 操作符用于合并两个或多个 SELECT 语句的结果集还可以合并INSERT插入语句。
UNION 语法:
SELECT 列名 FROM 表A
UNION
SELECT 列名 FROM 表B;
温馨提示:UNION 操作符默认为选取不同的值。如果查询结果需要显示重复的值,请使用 UNION ALL。
UNION ALL 语法:
SELECT 列名 FROM 表A
UNION ALL
SELECT 列名 FROM 表B;
实例:
使用 UNION 命令:
列出"Student"和"StuInfo"表中的所有信息
select * from student
UNION
select * from StuInfo;
温馨提示:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
NOT NULL – 非空
NOT NULL 约束强制列不接受 NULL 值。
NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
语法:
CREATE TABLE 表
(
列 int NOT NULL
);
温馨提示:如果插入 NULL 值,则会报错 ORA-01400 提示无法插入!NOT NULL 也可以用于查询条件同理NULL也可以。
VIEW – 视图
关系型数据库中的视图(View)是一个虚拟表,它由一个SQL查询定义,并不实际存储数据。视图可以看作是一个预先定义好的、复杂的SQL查询,它可以被当作一个表来使用,但实际上它只是查询结果的呈现。
视图的几个主要特点和用途包括:
-
数据简化:视图可以简化用户对数据的理解,只暴露用户需要的数据,隐藏了数据的具体实现细节。
-
数据安全:通过视图,可以限制用户访问某些数据,比如只允许用户查看特定的列或者满足特定条件的数据行。
-
逻辑数据独立性:当数据库的结构发生变化时,可以通过修改视图的定义来保持应用程序的一致性,无需修改应用程序本身。
-
性能优化:复杂的查询可以通过视图预先编写并优化,提高查询效率。
-
自定义数据表示:视图允许用户以不同的方式查看数据,比如合并多个表的数据,或者只展示部分数据。
语法:
创建视图
CREATE VIEW 视图名 AS
SELECT 列名
FROM 表名
WHERE 查询条件;
调用视图:
select * from 视图名称;
删除视图:
drop view 视图名称;
实例:
根据"Student"和"StuInfo"表中的学生姓名,学生性别,学生电话,学生地址创建视图
create view vStu as
select s.StuName,s.StuSex,si.StuPhone,si.StuAdress from student s,StuInfo si
where s.StuNo = si.StuNo
调用视图:
select * from vstu
查询这么多条数据,直接查询视图就可以查出来。
最后
本章要讲的就是Sql Server的高级语言,还有后续。