SQL 笔记系列三(操作符)

前言

由于操作中需要展示一些数据结果,这里先展示一些相关的两个表数据。


SQL 笔记系列三(操作符)_第1张图片
Table Name Orders

SQL 笔记系列三(操作符)_第2张图片
Table Name User

IN 操作符

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

SQL in 语法

select column_name(s) from Table where in (value1,....)

示例

-- 查询所在城市是 ShangHai、HangZhou 的用户
select * from User where city in ('ShangHai','HangZhou')

in 操作符 相当于 查询 city = shanghai 或者 city = hangzhou 的这些数据。

Between..And

BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。

语法

select * from TABLE where column_name between value1 and value2

示例1 : between and

-- 查询 年龄 18 - 50 岁的用户(包含 18、50 )
select * from User where age between 18 and 50

示例2 : not between and

-- 查询 年龄 0 - 18 之外的用户(不包含0、18)
select * from User where age not between 0 and 18

重要
不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。某些数据库会列出介于 "Adams" 和 "Carter" 之间的人,但不包括 "Adams" 和 "Carter" ;某些数据库会列出介于 "Adams" 和 "Carter" 之间并包括 "Adams" 和 "Carter" 的人;而另一些数据库会列出介于 "Adams" 和 "Carter" 之间的人,包括 "Adams" ,但不包括 "Carter" 。

所以,请检查你的数据库是如何处理 BETWEEN....AND 操作符的!

SQL Alias

表的 SQL Alias 语法(就是为字段、表 起一个简写的别名)

语法

select column_name(s) from Table as alias_name

示例

-- 原始语句
select Person.name ,Person.city ,User.name ,User.age from Person ,User  

-- 使用方式一
select p.name , p.city ,u.name ,u.age from Person as p , User as u
-- 使用方式二 (可以省略  as 关键字 ,
select p.name , p.city ,u.name ,u.age from Person p , User u

-- 注意 这里查询出来的结果是 (Person表的数量 * User表的数量) 条数据

JOIN

SQL JOIN 用于根据两个,或者多个表中的列之间的关系,进行查询这些表中的数据。

关键字 JOIN.. ON..

语法

select column_name(s) from Table1 join Table2 ON table1.column_name = table2.column_name

示例

select o.id, o.order_num ,u.name from User as u JOIN Orders as o ON u.id =o.u_id

等同于

select o.id,o.order_num, u.name from User as u ,Orders as o where u.id = o.u_id
select o.id ,o.order_num ,u.name from User as u inner JOIN Orders as o ON  u.id=o.u_id

示例结果

SQL 笔记系列三(操作符)_第3张图片

LEFT JOIN

SQL left join 以左表为参照,返回左表的所有数据,如果右表中没有与之匹配的数据,则显示 null. 如果右表中有左表中的重复数据,则多次显示。
语法

select column_name(s) from Table1 left join Table2 on Table1.column_name = Table2.column_name

在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。

示例一

select * from Orders as o left join User as u on u.id = o.u_id

示例结果

SQL 笔记系列三(操作符)_第4张图片

示例二

select * from User as u left join Orders as o on u.id = o.u_id

示例结果

SQL 笔记系列三(操作符)_第5张图片

Right JOIN

SQL right join 通过名字就能知道,它和 left join 是相反的,摘录 菜鸟教程 的介绍就是
RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
语法

select column_name(s) from Table1 RIGHT JOIN Table2 ON Table1.column_name = Table2.column_name

在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。
示例一(和 Left join 示例一 对应 )

select * from Orders as o right join User as u on u.id = o.u_id

示例结果(查询结果等同于 left Join 示例二)

SQL 笔记系列三(操作符)_第6张图片

示例二(和 Left join 示例二 对应)

select * from User as u right join Orders as o on u.id = o.u_id

示例结果(查询结果等同于 left Join 示例一)

SQL 笔记系列三(操作符)_第7张图片

FULL OUTER JOIN

MySql 不支持 此操作符。相关介绍 机票->菜鸟教程

UNION

合并两个或多个 select 语句的结果集 ,需要注意的是,在使用 union 时,UNION 内部的每个 SELECT 语句必须拥有相同数量的列 , 也就是 select 1 查询的列 要和 select2 查询的列数量一样。
语法

select column_name(s) from Table1   --注释: select1
union
select column_name(s) from Table2   --注释: select2

示例一

(select o.u_id as Id from Orders o
union
select u.id from User u)
order by Id

示例结果

+----+
| Id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
|  7 |
|  8 |
+----+
8 rows in set (0.00 sec)
union 默认的不存在重复值, 如果需要允许重复,则 使用 union all ,另外还要注意,默认查询出来的结果字段 默认使用 select1 的字段,如果字段有 alias 则使用 alias .

示例二

(select o.u_id as Id, o.order_num  from Orders o
union
select u.name ,u.age from User u)
order by Id

示例结果

+--------+-----------+
| Id     | order_num |
+--------+-----------+
| 2      |     10000 |
| 2      |     10010 |
| 3      |     10001 |
| 6      |     10003 |
| 6      |     10008 |
| 8      |     10004 |
| 8      |     10009 |
| 发强 |        16 |
| 孙六 |        16 |
| 张三 |         0 |
| 李四 |        18 |
| 王五 |        19 |
| 老二 |         0 |
| 赵7   |        18 |
+--------+-----------+
14 rows in set (0.00 sec)

这里要注意的是,多列合并的时候,只有当两条数据的所有查询结果列数据完全相同时,才被认定为重复数据。
示例 UNION All
union all 是允许有重复数据,

(select o.u_id Id from Orders o
union all
select u.id from User u)
order by Id

示例结果

+----+
| Id |
+----+
|  1 |
|  2 |
|  2 |
|  2 |
|  3 |
|  3 |
|  4 |
|  5 |
|  6 |
|  6 |
|  6 |
|  7 |
|  8 |
|  8 |
|  8 |
+----+
15 rows in set (0.00 sec)

你可能感兴趣的:(SQL 笔记系列三(操作符))