SQL Union和SQL Union All用法

SQL UNION 操作符

UNION 操作符用于合併五个或多少个 SELECT 语句的结果集。

请小心,UNION 内部的 SELECT
语句必得具备同一数量的列。列也必得有所诚如的数据类型。同时,每条
SELECT 语句中的列的顺序非得一致。

SQL UNION 语法
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

注脚:暗中认可地,UNION
操作符采纳不相同的值,即UNION是去了重的。倘使同意再一次的值,请使用 UNION
ALL。

SQL UNION ALL 语法
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

其它,UNION 结果聚焦的列名总是等于 UNION 中率先个 SELECT 语句中的列名。

UNION 指令的目标是将多个 SQL
语句的结果合併起来。从这几个角度来看, UNION 跟 JOIN
有微微近乎,因为那三个指令都能够由多少个表格中撷取资料。union只是将七个结实联结起来共同展现,并非洲统一组织一五个表………… UNION 的语法如下:

 [SQL 语句 1]
UNION
[SQL 语句 2]
 假设大家有以下的八个表格,

Store_Information 表格

store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999
Internet Sales 表格

Date Sales
Jan-07-1999 $250
Jan-10-1999 $535
Jan-11-1999 $320
Jan-12-1999 $750

而大家要搜索来有全部营业额 (sales) 的光阴。要实现这几个指标,我们用以下的
SQL 语句: SELECT Date FROM Store_Information
UNION
SELECT Date FROM Internet_Sales
 结果:

Date
Jan-05-1999
Jan-07-1999
Jan-08-1999
Jan-10-1999
Jan-11-1999
Jan-12-1999

有一点点值得注意的是,借使大家在其余四个 SQL 语句 (或是两句都二头) 用
SELECT DISTINCT Date” 的话,那大家会收获完全一致的结果。

SQL Union All
UNION ALL 这么些命令的目标也是要将五个 SQL
语句的结果合并在协同。 UNION ALL 和 UNION 差别之处在于 UNION
ALL
 会将每一笔符合条件的资料都列出来,无论资料值有无重复。 UNION
ALL
 的语法如下: [SQL 语句 1]
UNION ALL
[SQL 语句 2]
 大家用和上一页一样的例证来展现出 UNION
ALL
 和 UNION 的例外。同样若是我们有以下五个表格,

Store_Information 表格

store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999
Internet Sales 表格

Date Sales
Jan-07-1999 $250
Jan-10-1999 $535
Jan-11-1999 $320
Jan-12-1999 $750

而我们要寻觅有店面营业额以及互连网营业额的小日子。要完成那个指标,大家用以下的
SQL 语句: SELECT Date FROM Store_Information
UNION ALL
SELECT Date FROM Internet_Sales
 结果:

Date
Jan-05-1999
Jan-07-1999
Jan-08-1999
Jan-08-1999
Jan-07-1999
Jan-10-1999
Jan-11-1999
Jan-12-1999

1、给多少表加多一组数据:

有关Mysql整理的内需记念和熟练领悟的从头到尾的经过

图片 1  

1.查询数据表的音讯(比方有多少行数据):

图片 2

show table status like ‘tab_User’ —
数据表中的数码

 2、给多少表添扩张组数据:

 

图片 3

  1. 动用
    explain查看sql运维效用时

3、对数码举办删减和改换:

1)通过 ‘row’ 来查看扫描的行数

图片 4

2)通过 ‘key’ 来查阅使用的目录

 

 

图片 5

1. /* 查看操作 */ ------------------------------------------------------------------------------------------------------- 1. /* 查看操作 */ 

SHOW PROCESSLIST -- 显示哪些线程正在运行
SHOW VARIABLES -- 查看变量



2. /* 数据库操作 */ ------------------------------------------------------------------------------------------------------ 2. /* 数据库操作 */

-- 查看当前数据库
    select database();
-- 显示当前时间、用户名、数据库版本
    select now(), user(), version();

-- 复制表结构
    CREATE TABLE 表名 LIKE 要复制的表名
-- 复制表结构和数据
    CREATE TABLE 表名 [AS] SELECT * FROM 要复制的表名


3. /* 字符集编码 */ --------------------------------------------------------------------------------------------------------- 3. /* 字符集编码 */

字符编码
-- MySQL、数据库、表、字段均可设置编码
-- 数据编码与客户端编码不需一致
SHOW VARIABLES LIKE 'character_set_%'    -- 查看所有字符集编码项
    character_set_client        客户端向服务器发送数据时使用的编码
    character_set_results        服务器端将结果返回给客户端所使用的编码
    character_set_connection    连接层编码
SET 变量名 = 变量值
    set character_set_client = gbk;
    set character_set_results = gbk;
    set character_set_connection = gbk;
SET NAMES GBK;    -- 相当于完成以上三个设置


4./* 数据类型(列类型) */ ---------------------------------------------------------------------------------------------------4. /* 数据类型(列类型) */

1) 数值类型

  int            4字节
    bigint        8字节

 int(M)    M表示总位数
    - 默认存在符号位,unsigned 属性修改
    - 显示宽度,如果某个数不够定义字段时设置的位数,则前面以0补填,zerofill 属性修改
        例:int(5)    插入一个数'123',补填后为'00123'
    - 在满足要求的情况下,越小越好。
    - 1表示bool值真,0表示bool值假。MySQL没有布尔类型,通过整型0和1表示。常用tinyint(1)表示布尔型。

2) 字符串类型
-- a. char, varchar ----------
    char    定长字符串,速度快,但浪费空间
    varchar    变长字符串,速度慢,但节省空间
    M表示能存储的最大长度,此长度是字符数,非字节数。
    不同的编码,所占用的空间不同。
    char,最多255个字符,与编码无关。
    varchar,最多65535字符,与编码有关。
    一条有效记录最大不能超过65535个字节。
        utf8 最大为21844个字符,gbk 最大为32766个字符,latin1 最大为65532个字符
    varchar 是变长的,需要利用存储空间保存 varchar 的长度,如果数据小于255个字节,则采用一个字节来保存长度,反之需要两个字节来保存。
    varchar 的最大有效长度由最大行大小和使用的字符集确定。
    最大有效长度是65532字节,因为在varchar存字符串时,第一个字节是空的,不存在任何数据,然后还需两个字节来存放字符串的长度,所以有效长度是64432-1-2=65532字节。
    例:若一个表定义为 CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8; 问N的最大值是多少? 答:(65535-1-2-4-30*3)/3


5./* 建表规范 */ ------------------------------------------------------------------------------------------------------------------ 5./* 建表规范 */
    -- Normal Format, NF
        - 每个表保存一个实体信息
        - 每个具有一个ID字段作为主键
        - ID主键 + 原子表
    -- 1NF, 第一范式
        字段不能再分,就满足第一范式。
    -- 2NF, 第二范式
        满足第一范式的前提下,不能出现部分依赖。
        消除符合主键就可以避免部分依赖。增加单列关键字。
    -- 3NF, 第三范式
        满足第二范式的前提下,不能出现传递依赖。
        某个字段依赖于主键,而有其他字段依赖于该字段。这就是传递依赖。
        将一个实体信息的数据放在一个表内实现。

6./* select 查询语句*/ -------------------------------------------------------------------------------------------------------- 6./* select 查询语句*/

1) having 子句,条件子句
    与 where 功能、用法相同,执行时机不同。
    where 在开始时执行检测数据,对原数据进行过滤。
    having 对筛选出的结果再次进行过滤。
    having 字段必须是查询出来的,where 字段必须是数据表存在的。
    where 不可以使用字段的别名,having 可以。因为执行WHERE代码时,可能尚未确定列值。
    where 不可以使用合计函数。一般需用合计函数才会用 having
    SQL标准要求HAVING必须引用GROUP BY子句中的列或用于合计函数中的列。

7./* 备份与还原 */ ------------------------------------------------------------------------------------------------------------- 7./* 备份与还原 */
备份,将数据的结构与表内数据保存起来。
利用 mysqldump 指令完成。

-- 导出
1) 导出一张表
  mysqldump -u用户名 -p密码 库名 表名 > 文件名(D:/a.sql)
2)导出多张表
  mysqldump -u用户名 -p密码 库名 表1 表2 表3 > 文件名(D:/a.sql)
3)导出所有表
  mysqldump -u用户名 -p密码 库名 > 文件名(D:/a.sql)
4)导出一个库 
  mysqldump -u用户名 -p密码 -B 库名 > 文件名(D:/a.sql)

可以-w携带备份条件

-- 导入
1)在登录mysql的情况下:
  source  备份文件
2)在不登录的情况下
  mysql -u用户名 -p密码 库名 < 备份文

8./* 锁表 */  ------------------------------------------------------------------------------------------------------------------ 8./* 锁表 */
表锁定只用于防止其它客户端进行不正当地读取和写入
MyISAM 支持表锁,InnoDB 支持行锁
-- 锁定
    LOCK TABLES tbl_name [AS alias]
-- 解锁
    UNLOCK TABLES

4、用select查询单个或多个数据新闻:

 

图片 6

9./* 用户和权限管理 */ -------------------------------------------------------------------------------------------------------- 9./* 用户和权限管理 */

用户信息表:mysql.user
-- 刷新权限
FLUSH PRIVILEGES
-- 增加用户
CREATE USER 用户名 IDENTIFIED BY [PASSWORD] 密码(字符串)
    - 必须拥有mysql数据库的全局CREATE USER权限,或拥有INSERT权限。
    - 只能创建用户,不能赋予权限。
    - 用户名,注意引号:如 'user_name'@'192.168.1.1'
    - 密码也需引号,纯数字密码也要加引号
    - 要在纯文本中指定密码,需忽略PASSWORD关键词。要把密码指定为由PASSWORD()函数返回的混编值,需包含关键字PASSWORD
-- 重命名用户
RENAME USER old_user TO new_user
-- 设置密码
SET PASSWORD = PASSWORD('密码')    -- 为当前用户设置密码
SET PASSWORD FOR 用户名 = PASSWORD('密码')    -- 为指定用户设置密码
-- 删除用户
DROP USER 用户名
-- 分配权限/添加用户
GRANT 权限列表 ON 表名 TO 用户名 [IDENTIFIED BY [PASSWORD] 'password']
    - all privileges 表示所有权限
    - *.* 表示所有库的所有表
    - 库名.表名 表示某库下面的某表
-- 查看权限
SHOW GRANTS FOR 用户名
    -- 查看当前用户权限
    SHOW GRANTS; 或 SHOW GRANTS FOR CURRENT_USER; 或 SHOW GRANTS FOR CURRENT_USER();
-- 撤消权限
REVOKE 权限列表 ON 表名 FROM 用户名
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用户名    -- 撤销所有权限
-- 权限层级
-- 要使用GRANT或REVOKE,您必须拥有GRANT OPTION权限,并且您必须用于您正在授予或撤销的权限。
全局层级:全局权限适用于一个给定服务器中的所有数据库,mysql.user
    GRANT ALL ON *.*和 REVOKE ALL ON *.*只授予和撤销全局权限。
数据库层级:数据库权限适用于一个给定数据库中的所有目标,mysql.db, mysql.host
    GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤销数据库权限。
表层级:表权限适用于一个给定表中的所有列,mysql.talbes_priv
    GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。
列层级:列权限适用于一个给定表中的单一列,mysql.columns_priv
    当使用REVOKE时,您必须指定与被授权列相同的列。

 

图片 7

 

图片 8

5、去除重复值:

图片 9

 6、查询的种种用法:

between的用法:

图片 10

 

图片 11

发表评论

电子邮件地址不会被公开。 必填项已用*标注