文章目录
SQL_LIKE(运算符)
- 在
WHERE子句中使用LIKE
运算符来搜索列中的指定模式,LIKE
通常和两个通配符一起使用:% - 百分号表示零个,一个或多个字符
,_ - 下划线表示单个字符
,百分号和下划线也可以组合使用! - 使用AND或OR运算符组合任意数量的条件
语法格式
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
常见的LIKE运算符语句:
WHERE CustomerName LIKE 'a%'
查找以“a”开头的任何值WHERE CustomerName LIKE '%a'
查找以“a”结尾的任何值WHERE CustomerName LIKE '%or%'
在任何位置查找任何具有“or”的值WHERE CustomerName LIKE '_r%'
在第二个位置查找任何具有“r”的值WHERE CustomerName LIKE 'a_%_%'
查找以“a”开头且长度至少为3个字符的值WHERE ContactName LIKE 'a%o'
找到以"a"开头,以"o"结尾的值
SQL_Wildcards 通配符
- 通配符用于替换字符串中的任何其他字符。
SQL [charlist] 通配符:
- SQL 语句选择所有客户 City 以"b"、"s"或"p"开头:
SELECT * FROM Customers
WHERE City LIKE '[bsp]%';
- SQL 语句选择“City”以“a”、“b”或“c”开头的所有客户:
SELECT * FROM Customers
WHERE City LIKE '[a-c]%';
- SQL 语句选择所有客户 City 不以"b"、"s"或"p"开头:
SELECT * FROM Customers
WHERE City LIKE '[!bsp]%';
SQL_IN(运算符)
IN
运算符允许在WHERE
子句中指定多个值。IN
运算符是多个OR
条件的简写。
语法格式一:
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);
语法格式二:
SELECT column_name(s)
FROM table_name
WHERE column_name IN (SELECT STATEMENT);
- SQL 语句选取位于“Germany”,“France”和“UK”的所有客户:
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
- SQL 语句选取来自同一国家的所有客户作为供应商:
SELECT * FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);
SQL_BETWEEN(运算符)
BETWEEN运算符
用于选取介于两个值之间的数据范围内的值。BETWEEN运算符
选择给定范围内的值。值可以是数字,文本或日期。BETWEEN
运算符是包含性的:包括开始和结束值,且开始值需小于结束值。
BETWEEN 语法格式:
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
查询Java_id从103到106的信息
SELECT *
FROM Java1_student
WHERE Java1_id BETWEEN 103 AND 106
ORDER BY Java1_id;
选择Java1_id在101-16之间,但是Java1_id不是103,105,并且按照Java1_id升序排列的数据
SELECT *FROM Java1_student
WHERE Java1_id BETWEEN 101 AND 106
AND NOT Java1_id IN (103,105)
ORDER BY Java1_id;
带有日期值的 BETWEEN 操作符实例
- 选取
Java1_Date 介于 '2018-5-9' AND '2019-5-1';
之间的所有学生信息:
SELECT * FROM Java1_student
WHERE Java1_Date BETWEEN '2018-5-9' AND '2019-5-1';
% 的使用
IN 操作符允许您在 WHERE 子句中规定多个值。
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,…);
IN 与 = 的异同
相同点:均在WHERE中使用作为筛选条件之一、均是等于的含义
不同点:IN可以规定多个值,等于规定一个值
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
例如,查询上述的Sage在22到25之间的人的Sid,Sname;
在这,还是比较建议大家按着语法格式来的,之前也说了,已经学习了一段时间的数据库了,这次是进行一个算是总结吧,人无完人,时间长了,有些碎碎的知识点会遗忘,仅以博客的形式见证此时的付出与认真。
例如,查询上述的Sage不在22到25之间的人的Sid,Sname;
注意这里是不在,操作也很简单,在使用NOT BETWEEN 就可以了。这里就不进行具体操作了,毕竟自己动手才是王道嘛。
IN 和 BETWEEN 的混合语句,和他们的基本用法差不多,如果你还不是很了解他们的语法,那么建议你仔细看看上文,
例如,查询上述的Sage在22到25之间的人的Sid,Sname;但是Smajor不为软件行业和服装设计的人
请注意,在不同的数据库中,BETWEEN 操作符会产生不同的结果!
在某些数据库中,BETWEEN 选取介于两个值之间但不包括两个测试值的字段。
在某些数据库中,BETWEEN 选取介于两个值之间且包括两个测试值的字段。
在某些数据库中,BETWEEN 选取介于两个值之间且包括第一个测试值但不包括最后一个测试值的字段。
SQL_自增字段(AUTO INCREMENT)
Auto-increment
自增字段会在新记录插入表中时生成一个唯一的数字。- 通常希望在每次插入新记录时自动创建主键字段的值。在表中创建一个自动增量(auto-increment)字段。
将 “Persons” 表中的“ID”列定义为自动递增( auto-increment )主键字段:
CREATE TABLE Persons
(
ID int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
-
IDENTITY的起始值为1,每个新记录增量为1。
-
指定“ID”列以10开头,并递增5,将标识( identity )更改为IDENTITY(10,5)。
-
要在
"Persons"
表中插入新记录,我们不需要为"ID"栏指定值(自动添加唯一值):
SQL_VIEW(视图)
- 视图是基于 SQL 语句的结果集的可视化表。
- 视图可以包含表中的所有列,或者仅包含选定的列。视图可以创建自一个或者多个表,这取决于创建该视图的 SQL 语句的写法
- 视图包含行和列,就像真正的表一样。视图中的字段是一个或多个数据库中真实表中的字段。
- 视图总是显示最新数据!每当用户查询视图时,数据库引擎就使用视图的 SQL 语句重新构建数据。
- 视图允许以用户或者某些类型的用户感觉自然或者直观的方式来组织数据;
- 视图限制对数据的访问,从而使得用户仅能够看到或者修改(某些情况下)他们需要的数据;
- 视图从多个表中汇总数据,以产生报表。从多个表中汇总数据,以产生报表。
创建视图的语法:
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
创建基于Java1_student的视图,stu_view,
CREATE VIEW stu_view AS
SELECT id,name,age
FROM Java1_student
WHERE id<106;
SQL_更新视图
CREATE OR ALTER VIEW 语法
CREATE OR ALTER VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
向 “stu_view” 视图添加 “sex” 列。我们将通过下列 SQL 更新视图:
ALTER VIEW stu_view AS
SELECT id,name,age,sex
FROM Java1_student
WHERE id<106;
SQL_撤销视图
- 通过
DROP VIEW
命令来删除视图。DROP VIEW view_name
SQL_(UNION运算符),(SELECT INTO 语句),(INSERT INTO SELECT语句)
SQL_UNION运算符
UNION
运算符用于组合两个或更多SELECT
语句的结果集,而不返回任何重复的行。UNION中的每个SELECT
语句必须具有相同的列数,和相似的数据类型- 每个
SELECT
语句中的列也必须以相同的顺序排列和相同数目的列表达式 - 每个
SELECT
语句的长度可以不同
UNION 语法1
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
- 默认情况下,
UNION 运算符
选择一个不同的值。如果允许重复值,请使用UNION ALL
。
SELECT * FROM Java1_student
UNION
SELECT * FROM Java2_student
UNION 语法2
SELECT column_name(s) FROM table1
[WHERE condition]
UNION
SELECT column_name(s) FROM table2
[WHERE condition];
选择Java1_student.age > 23和Java2_student.age > 22的数据
SELECT * FROM Java1_student
WHERE Java1_student.age > 23
UNION
SELECT * FROM Java2_student
WHERE Java2_student.age > 22
UNION ALL 语法1
UNION All
运算符用于组合两个SELECT语句(包括重复行)的结果。- 适用于UNION子句的相同规则将适用于UNION All操作符。
UNION结果集
中的列名总是等于UNION中第一个SELECT
语句中的列名
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
UNION ALL 语法2
SELECT column_name(s) FROM table1
[WHERE condition]
UNION ALL
SELECT column_name(s) FROM table2
[WHERE condition];
SQL_SELECT INTO
SELECT INTO
语句从一个表中复制数据,然后将数据插入到另一个新表中。- 新表不能是已经存在的表,否则会报出异常
将Java1_student所有信息都复制到student1中
SELECT *
INTO student1
FROM Java1_student;
只复制选定列插入到student1中
SELECT id,name,grade
INTO student1
FROM Java1_student;
使用 IN子句复制表到另一个数据库中
SELECT *
INTO student1 IN 'student.mdb'
FROM Java1_student;
SQL_INSERT INTO SELECT
- INSERT INTO SELECT 语句从表中复制数据,并将数据插入现有的表中。目标表中的任何现有行都不会受到影响。
将所有列从一个表中都知道另一个已经存在的表中
INSERT INTO table2
SELECT * FROM table1;
将Java1_student的数据复制到Java2_stude中t
INSERT INTO Java1_student
SELECT * FROM Java2_student;
通过使用 SQL,可以为表名称或列名称指定别名。创建别名是为了让列名称的可读性更强。也方便管理数据
例如,将Sid起别名为学号,Smajor起别名为专业。
但是,记住,此时再查询Student表,Sid,Smajor并未改成学号,专业
但是如果你从Student表中查询"学号",那么就会出现这种情况
就是所查询的Sid内容变成学号,在使用别名时,应当不可以在包含AS语句运行完之后,查询别名。
AS也可以创建表的别名,例如,给Student表起别名为S,并进行一些操作。
在下面的情况下,使用别名很有用:
在查询中涉及超过一个表
在查询中使用了函数
列名称很长或者可读性差
需要把两个列或者多个列结合在一起
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
这里是出现异常的,原因就是我们在查询的时候,出现了问题。
查询正确的应该是这样的
这个其实也是错的。原因是两张表中的列名都不一样,所以自然就没消除重复的值了
这才是正确的使用UNION消去重复值。