🙉SQL 进阶语法

32

SQL 进阶语法

SQL select top 指定查询返回数据的数目

SELECT TOP 子句用于规定要返回的记录的数目。

SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。

**注意:**并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。

1.SQL Server / MS Access 语法

select top 数量 percent(百分比) * from 表名;

2.My SQL 语法

select * from 表名 limit 数量;	// MySQL支持的是 limit 语法来指定返回数据数目

3.Oracle 语法

select * from 表名 where rownum <= 数量;	//Oracle 使用 rownum 语法来指定返回数据数目

SQL like 查询

select * from 表名 where name(名称) like '张三';	//查询名称叫做张三的数据
select * from where name(名称) not like '%张三%';	// 查询名称不为张三的数据

SQL 通配符

SQL  %  通配符

替代 0 个或多个字符

select * from 表名 where name like '张%';	//以张开始的名称数据
select * from 表名 where name like '%三';	//以三结尾的名称数据

SQL  _  通配符

替代一个字符

select * from 表名 where name like '_三';	//name 以一个任意字符开始,然后是 "三" 的所有客户数据

SQL  [charlist] 通配符

select * from 表名 where name like '^[GFs]';	//name 以 "G"、"F" 或 "s" 开始的客户数据
select * from 表名 where name like '^[A-H]';	//name 以 A 到 H 字母开头的客户数据

SQL  [!charlist] / [^charlist]  通配符

select * from 表名 where name like '^[^A-H]';	//name 不以 A 到 H 字母开头的客户数据
select * from 表名 where name like '^[!A-H]';	//name 不以 A 到 H 字母开头的客户数据

SQL in 操作符

IN 操作符允许您在 WHERE 子句中规定多个值。

select * from 表名 where 列名 in (条件1,条件2,条件3,...) ;

SQL between 操作符

BETWEEN 操作符用于选取介于两个值之间的数据范围内的值。

SELECT *
FROM sales_orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31';

SQL 别名

通过使用 SQL,可以为表名称或列名称指定别名。
基本上,创建别名是为了让列名称的可读性更强。

列的 SQL 别名语法

select 列名 as 别名 from 表名;

表的 SQL 别名语法

select * from 表名 as 别名;

SQL 连接(join)

SQL join 用于把来自两个或多个表的行结合起来。
下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。

SQL inner join 内连接 join

inner join,其实就是“join”,为了简写才写成join,两个是表示一个的,内连接,表示以两个表的交集为主,查出来是两个表有交集的部分,其余没有关联就不额外显示出来;

select1.name,表1.age,表2.log,表2
from1 
inner join2
on1.id =2.id;	//inner join 就是内连接查询的关键字,on 就是连接查询条件。

SQL left join 左连接

顾名思义,就是“左连接”,表1左连接表2,以左为主,表示以表1为主,关联上表2的数据,查出来的结果显示左边的所有数据,然后右边显示的是和左边有交集部分的数据;

select * from1 left join2 on1.id =2.id;

SQL right join 右连接

“右连接”,表1右连接表2,以右为主,表示以表2为主,关联查询表1的数据,查出表2所有数据以及表1和表2有交集的数据;

select * from1 right join2 on1.id =2.id;

SQL full outer join 全外连接 full join

select * 
from1
full outer join2
on1.id =2.id;

FULL OUTER JOIN 关键字返回左表(Websites)和右表(access_log)中所有的行。如果 "Websites" 表中的行在 "access_log" 中没有匹配或者 "access_log" 表中的行在 "Websites" 表中没有匹配,也会列出这些行。
个人理解:会显示所有的数据,但是两个表之间条件不等的就会返回自己的数据和另外一个表的空数据;

SQL union 操作符

SQL union 操作符合并两个或多个的 select 语句的结果。
注意: union 内部的每个 select 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

union

默认查询返回结果去重。

select name1 from1
union
select name2 from2;

unoin all

使用 union all 的查询返回结果是允许重复的值。

select name1 from1
union all
select name2 from2;

SQL select into 表复制

通过 SQL,您可以从一个表复制信息到另一个表。
SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表

复制所有的列到新表

select * 
into 新表
from 旧表;

复制指定的列到新表

select name
into 新表
from 旧表;

My SQL 表数据复制语法

注意:MySQL 数据库不支持 SELECT ... INTO 语句,但支持 INSERT INTO ... SELECT 。
当然你可以使用以下语句来拷贝表结构及数据:

create table 新表
as
select * from 旧表;

SQL insert into selsect 表复制(需要目标表存在)

通过 SQL,您可以从一个表复制信息到另一个表。
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。
**注意:**一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。

insert into 旧表
select * from 新表;

SQL create database 创建数据库

create database 数据库名;

SQL create table 创建表

create table 表名;

SQL 约束

SQL 约束用于规定表中的数据规则。
如果存在违反约束的数据行为,行为会被约束终止。
约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。

not null

指定某个列不能存储 null 值;

unique

保证某列的每行必须有唯一的值;

primary key 主键

主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。

foreign kry 外键

一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。