数据库学习
文章目录
一、SQL BETWEEN 操作符:
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
代码如下(示例):
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
或
SELECT column_name(s)
FROM table_name
WHERE column_name NOT BETWEEN value1 AND value2;
请注意,在不同的数据库中,BETWEEN 操作符会产生不同的结果!
在某些数据库中,BETWEEN 选取介于两个值之间但不包括两个测试值的字段。
在某些数据库中,BETWEEN 选取介于两个值之间且包括两个测试值的字段。
在某些数据库中,BETWEEN 选取介于两个值之间且包括第一个测试值但不包括最后一个测试值的字段。
二、SQL 连接(JOIN):
1.SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
代码如下(示例):
id=“selectPerson”:这个语句名为 selectPerson,
parameterType=“int”:接受一个 int(或 Integer)类型的参数,
resultType=“hashmap”:并返回一个 HashMap 类型的对象,其中的键是列名,值便是结果行中的对应值。
resultMap=“personResultMap”:对外部 实体类的命名引用。
resultType 和 resultMap 之间只能同时使用一个
2.SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行。(inner join)
代码如下(示例):
SELECT Websites.id, Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id;
3.不同的 SQL JOIN:
INNER JOIN:如果表中有至少一个匹配,则返回行
A inner join B 取交集。
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
A left join B 取 A 全部,B 没有对应的值为 null。
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
A right join B 取 B 全部 A 没有对应的值为 null。
FULL JOIN:只要其中一个表中存在匹配,则返回行、
A full outer join B 取并集,彼此没有对应的值为 null。
对应条件在 on 后面填写。
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
4.在使用 join 时,on 和 where 条件的区别如下:
1、 on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。
2、where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
三、SQL UNION:
1.SQL UNION 操作符:
SQL UNION 操作符合并两个或多个 SELECT 语句的结果。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同.
2.SQL UNION 语法:
默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
SQL UNION ALL 语法:
UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
三、SQL SELECT INTO语句:
可以从一个表复制信息到另一个表。
SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中
SQL SELECT INTO 实例:
>>1.创建 Websites 的备份复件:
SELECT *
INTO WebsitesBackup2016
FROM Websites;
>>2.只复制一些列插入到新表中:
SELECT name, url
INTO WebsitesBackup2016
FROM Websites;
>>3.只复制中国的网站插入到新表中:
SELECT *
INTO WebsitesBackup2016
FROM Websites
WHERE country='CN';
>>4.复制多个表中的数据插入到新表中:
SELECT Websites.name, access_log.count, access_log.date
INTO WebsitesBackup2016
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id;
注意:
MySQL 数据库不支持 SELECT … INTO 语句,但支持 INSERT INTO … SELECT 。可以使用以下语句来拷贝表结构及数据:
CREATE TABLE 新表
AS
SELECT * FROM 旧表
四、SQL INSERT INTO SELECT 语句:
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。
select into from 和 insert into select 都是用来复制表
两者的主要区别为: select into from 要求目标表不存在,因为在插入时会自动创建;insert into select from 要求目标表存在。
- 复制表结构及其数据:
create table table_name_new as select * from table_name_old
- 只复制表结构:
create table table_name_new as select * from table_name_old where 1=2;
或者:
create table table_name_new like table_name_old
- 只复制表数据:
如果两个表结构一样:
insert into table_name_new select * from table_name_old
如果两个表结构不一样:
insert into table_name_new(column1,column2...) select column1,column2... from table_name_old
五、SQL 约束(Constraints):
1.NOT NULL - 指示某列不能存储 NULL 值。
2.UNIQUE - 保证某列的每行必须有唯一的值。
3.PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
4.FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
5.CHECK - 保证列中的值符合指定的条件。
6.DEFAULT - 规定没有给列赋值时的默认值。
六、SQL SELECT DISTINCT 语句:
在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
DISTINCT 关键词用于返回唯一不同的值。