马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一、数据界说语言DDL
(一)界说
数据界说语言(Data Definition Language, DDL),主要用来利用数据库和利用数据表格式。此中利用数据库主要包括创建数据库(create)、更新数据库(alter)和删除数据库(drop)。
(二)基础DDL语句
(1)对数据库的利用
1、创建数据库
SQL中使用create语句来创建数据库,具体语法为
- CREATE DATABASE [IF NOT EXISTS] 数据库名;
复制代码 由于数据库不可以重名,故添加[if not exists],如果已有同名数据库则不重复利用。若不声明[if not exists],当存在同名数据库时将报错。
2、删除数据库
SQL中使用drop语句来删除数据库,具体语法为
- DROP DATABASE [IF EXISTS] 数据库名;
复制代码 使用[if exists]时确保若不存在此数据库时也不报错,但对于打错数据库名导致没有删除精确的数据库时,添加该语句的方法并不好。
【留意】使用drop database删除数据库后,数据库中存储的全部数据表和数据都将一同被删除,而且无法规复。
3、修改数据库编码
SQL中使用如下语句来修改编码
- ALTER DATABASE 数据库名 CHARACTER SET 编码名
复制代码 【留意】SQL中全部的编码名不能使用“-”,例如UTF-8要写成UTF8。
(2)对数据表的利用
1、创建表
SQL使用create语句来创建数据表,具体语法示例为
- CREATE TABLE [IF NOT EXISTS] 表名(
- 字段名1 字段类型 [字段属性][字段约束]
- 字段名2 字段类型 [字段属性][字段约束]
- ......
- )
复制代码 【增补1】MySQL中常用的数据类型:主要是三种,即文本(Text)、数字(Number)和日期/时间(Date/Time)类型。
1)文本(Text)类型:
- CHAR(size):保存固定长度的字符串(可包含字母、数字及特殊字符)。在括号中指定字符串的长度,最多255个字符;
- VARCHAR(size):保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度,最多255个字符。若超过则会被转为TEXT类型;
- TINYTEXT:存放最大长度为255个字符的字符串;
- TEXT:存放最大长度为65,535个字符的字符串;
- BLOB:用于BLOBs(Binary Large Objects),存放最多65,535字节的数据;
- BOOLEAN:布尔类型,存储TRUE或FALSE值;
- MEDIUMTEXT:存放最大长度为16,777,215个字符的字符串;
- MEDIUMBLOB:用于BLOBs,存放最多16,777,215字节的数据;
- LONGTEXT:存放最大长度为4,294,967,295个字符的字符串;
- LONGBLOB:用于BLOBs,存放最多4,294,967,295字节的数据;
- ENUM(x,y,z,etc.):输入列表。可以在ENUM中列出最大65,535个值。如果不存在插入的值,则默认插入空值。且列表值的序次是输入的序次。例如,ENUM('X','Y','Z');
2)数字(Number)类型:
- TINYINT(size):带符号-128到127,无符号0到255。size为指定的巨细;
- SMALLINT(size):带符号范围-32,768到32,767,无符号0到65,535,size默认为6;
- MEDIUMINT(size):带符号范围-8,388,608到8,388,607,无符号范围0到16,777,215,size默认为9;
- INT(size):带符号范围-2,147,483,648到2,146,483,647,无符号范围0到4,294,967,295,size默认为11;
- BIGINT(size):带符号范围-9,223,372,036,854,775,808到9,223,372,036,854,775,807,无符号范围0到18,446,744,073,709,551,615,size默认为20;
- FLOAT(size,d):带有浮动小数点的小数,参数size规定表现最大位数,参数d规定小数点右侧的最大位数;
- DOUBLE(size,d):带有浮动小数点的大数,参数size规定表现最大位数,参数d规定小数点右侧的最大位数;
- DECIMAL(size,d):以字符串情势存储的DOUBLE类型;
【注】以上所述的size代表的只是表现的数字长度,并不是存储在数据库中的具体长度。例如,int(size)无论size为多少,均在磁盘上占用4btyes的存储空间。在表现上,例如:若int值为10,则int(4)表现结果为0010,int(3)表现结果为010。
3)日期(Date)类型:
- DATE():日期类型,格式为YYYY-MM-DD;
- DATETIME():日期和时间的组合,格式为YYYY-MM-DD HH:MM:SS;
- TIMESTAMP():时间戳,使用Unix纪元('1970-01-01 00:00:00' UTC)至今的秒数来存储。格式与DATATIME()相同。但支持的范围为'1970-01-01 00:00:01'UTC到'2038-01-09 03:14:07' UTC;
- TIME():时间,格式为HH:MM:SS;
- YEAR():2位或4位格式的年。2位格式所允许的值为70到69,表示从1970到2069。4位格式所允许的值为1901到2155;
【注】虽然DATETIME和TIMESTAMP返回相同的格式,但它们的工作方式差别。在INSERT或UPDATE查询中,TIMESTAMP主动把自身设置为当前的日期和时间。TIMESTAMP也接受差别的格式,如YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD。
【增补2】字段束缚:SQL中,建表时规定的束缚,若在插入数据时违反则会被终止插入。
- NOT NULL:该列数据不能存储NULL值;
- UNIQUE:该列不能有重复值;
- PRIMARY KEY:主键束缚。雷同于not null和unique的结合。确保某列(或多列的组合)有唯一的标识,有助于更快速地找到表中的特定记载;
- FOREIGN KEY:确保表中的数据匹配另一个表中的值的参照完整性;
- -- 示例
- CREATE TABLE Orders(
- OrderID INT NOT NULL PRIMARY KEY,
- OrderNumber INT NOT NULL,
- CustomerID INT,
- FOREIGN KEY(CustomerID) REFERENCES Customers(CustomerID)
- );
复制代码 - CHECK(条件):包管列中的值符合指定的条件;
- DEFAULT(默认值):没有给列赋值时的默认值;
- INDEX:用于快速访问数据库表中的数据;
- -- 示例
- CREATE INDEX idx_lastname
- ON Employees(LastName);
复制代码 2、查看表布局
表布局就是数据表包含哪些字段,各字段的字段名、字段类型和巨细等。对于差别的目标,可以使用差别的查询语句。
1)查询表的列信息
- DESC 表名;
- 或者
- DESCRIBE 表名;
- 或者
- SHOW COLUMNS FROM 表名;
复制代码 2)查询建表语句
3)查询元数据
元数据是指界说数据布局的数据,如数据库名、表名、字段类型、外键束缚等。
- USE INFORMATION_SCHEMA
- SELECT * FROM columns WHERE table_name = '表名';
复制代码 3、更新表和字段布局
SQL中更新表和字段的布局主要用alter table语句,对字段布局的利用有增加字段add、更改字段类型modify、更改字段名及类型change和删除字段drop;修改表名使用rename to。
1)增加字段
SQL中用add语句添加表中的字段布局,具体语法为
- ALTER TABLE 表名 ADD(
- 新增字段名1 数据类型 约束
- 新增字段名2 数据类型 约束
- );
复制代码 2)更改字段类型
SQL中用modify来修改字段类型,具体语法为
- ALTER TABLE 表名 MODIFY 字段名 新字段属性;
复制代码 3)更改字段名和类型
SQL中用change来修改字段名,具体语法为
- ALTER TABLE 表名 CHANGE 旧字段名 新字段名 字段属性;
复制代码 4)删除字段
SQL中用drop来删除字段名,具体语法为
5)修改表名
SQL中用rename to来修改表名,具体语法为
- ALTER TABLE 原表名 RENAME TO 新表名;
复制代码 4、删除表
SQL中删除表共有三种方法,drop、truncate和delete。
1)drop
用drop删除表会将表的内容和界说一并删除以释放空间,且该表的布局中被依靠的束缚(constrain)、触发器(trigger)和索引(index)也会被删除。依靠于该表的存储过程/函数将被保留,但状态会变为invalid。具体语法为
2)truncate
用truncate删除表只会清空表的内容,释放空间但会保留表的数据布局。具体语法为
3)delete
用delete来删除表中的行。且delete语句执行删除的过程是每次从表中删除一行,该行的删除利用会作为事务记载在日志中保存,以便进行回滚利用。
delete可以用where语句选择特定条件的行进行删除(属于DML的内容)。
且delete和truncate一样,只删除内容,保留表的数据布局。具体语法为
- DELETE FROM 表名 WHERE 字段名 = 某值;
复制代码 二、数据利用语言DML
(一)界说
数据利用语言(Data Manipulation Language, DML),主要用来对数据库中表的数据进行增加(insert)、删除(delete)和修改(update)。
(二)基础DML语句
(1)插入数据
SQL中用insert来向表中插入数据,主要有两种方法
方法一:
- INSERT INTO 表名 (列名1, 列名2, ...) VALUES (value1, value2, ...);
复制代码 使用该方法可以对表中的部门选定列进行数据插入利用,且不在列名集合内的字段值为null。
方法二:
- INSERT INTO 表名 VALUES (value1, value2, ...);
复制代码 该方法没有订定要插入的列,故按照创建表时列的序次插入列值,且不可以插入部门数据(存疑,必要实证一下);
【注】插入的全部字符串数据都必要用单引号('')引用。
(2)修改数据
SQL中用update来修改表中的数据,具体如下
- UPDATE 表名 SET 列名1=value1, 列名2=value2, ... [WHERE 条件];
复制代码 update语句可以使用where条件语句来进行条件修改利用。
(3)删除数据
此部门同DDL中的【4、删除表】部门。
三、数据控制语言DCL
(一)界说
数据控制语言(Data Control Language, DCL)用于界说用户的访问权限和安全级别,主要包括创建用户(create)、授权(grant)、撤销授权(revoke)、查看权限(show grants)、删除用户(drop)和以root身份修改用户密码(alter)。
(二)基础DCL语句
(1)创建用户
SQL使用create user语句来创建用户,具体如下
- CREATE USER '用户名' @地址 IDENTIFIED BY '密码';
复制代码 【注】若给全部地址的用户授权,使用@'%'。
(2)用户授权
SQL使用grant语句来给用户授权,具体如下
- GRANT 权限1,权限2,... ON 数据库名.* TO '用户名'@地址;
- 其中,能给用户授予的权限有CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT等;
- 若要授予所有权限,则用
- GRANT ALL ON 数据库名.* TO '用户名'@地址;
复制代码 (3)撤销授权
SQL使用revoke语句来撤销给用户的授权,具体如下
- REVOKE 权限1,权限2,... ON 数据库名.* FROM '用户名'@地址;
复制代码 具体可以撤回的权限和撤回全部权限的方法与授权时完全相同。
(4)查看用户权限
SQL使用show grants语句来查看授权给用户的权限,具体如下
- SHOW GRANTS FOR '用户名'@地址;
复制代码 (5)删除用户
SQL使用drop语句来删除用户,具体如下
(6)修改用户密码
SQL修改用户密码的利用必须以root身份执行,使用alter语句修改,具体如下
- ALTER USER ‘用户名’@地址 IDENTIFIED BY '新密码';
复制代码 三、数据查询语言DQL
(一)界说
数据查询语言(Data Query Language, DQL)。主要是对数据进行查询利用,且可以对于从数据库中查出的结果进行各种运算再最终展示。一般语法布局为
- SELECT 列名 --要查询的字段名称
- FROM 表名 --目标表名
- WHERE 条件 --查询的行条件
- GROUP BY 分组列 --对结果分组
- HAVING 分组条件 --分组后的行条件(满足该条件才最终展示)
- ORDER BY 排序列 --对结果进行排序(默认升序esc,降序为desc)
- LIMIT 起始行,总行数 --对所查询的结果进行行数的限定选择
-
复制代码 (二)具体查询语法
1. 基础查询
基础语法在(一)中已经论述,可以用
来选去表中的全部列,“*”为通配符,代表全部列;
2. 条件查询
DQL在查询时,在WHERE字句中输入查询条件,常用的查询条件有
- -- 比较
- =、!=、<>、<、<=、>、>=;
- -- 范围选择
- BETWEEN ... AND ...;
- -- 集合判断
- IN(所需要筛选判断的集合);
- -- 判断(不)为空
- IS (NOT) NULL;
- -- 逻辑与
- AND
- -- 逻辑或
- OR
- -- 逻辑非
- NOT
复制代码 3. 模糊查询
模糊查询的一般语法为
- SELECT 字段
- FROM 表名
- WHERE 某字段 LIKE 条件
复制代码 对于like后的条件,SQL提供了两种匹配模式:
(1)%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,则需使用两个百分号(%%)表示。示例如下
- -- 查询姓名以"z"开头的学生记录
- SELECT * FROM stu
- WHERE name LIKE 'z%';
- -- 查询姓名中包含"a"的学生记录
- SELECT * FROM stu
- WHERE name LIKE '%a%';
复制代码 (2)_:表示任意单个字符。可匹配单个任意字符,常用来限制表达式的字符长度。示例如下
- -- 查询姓名由5个字母构成,且第5个字母为“i”的学生记录
- SELECT * FROM stu
- WHERE sname LIKE '_ _ _ _ _i';
- -- 查询姓名中第2个字母为“i”的学生记录
- SELECT * FROM stu
- WHERE sname LIKE '_i%';
复制代码 4. 字段控制查询
(1)对查询结果去重
若查询的结果中在某一列(或某几列)上有重复值,可以使用distinct语句进行去重,具体如下
- SELECT DISTINCT 列名1,列名2,...
- FROM 表名;
复制代码 (2)字段加运算
若查询得到的某两列(或多列)均为数值型,则可以做加运算。具体如下
- SELECT 列名1+列名2+... AS 别名
- FROM 表名;
复制代码 【留意】如果相加的某列中存在空值null,则其与任何数值相加仍然是null。为了解决这一题目,可以把null转化为数值0。具体如下
- SELECT 列名1+IFNULL(列名2, 0) AS 别名
- FROM 表名;
复制代码 5. SQL函数大全(紧张)
1)聚合函数
聚合函数是用来做纵向(列)运算的函数,常用的聚合函数及其用法如下
(1)COUNT():统计指定列不为NULL的记载行数。例如
- -- 查询emp表中月薪大于2500的人数
- SELECT COUNT(*)
- FROM employee
- WHERE sal > 2500;
复制代码 (2)SUM():盘算指定列的数值和,如果指定列类型不是数值类型,则会直接略过该列地点行。例如
- -- 查询所有雇员月薪和id之和
- SELECT SUM(sal+id) AS 别名
- FROM emp;
复制代码 【注】在上述代码中,若某一行的sal为null但id非null,则也不会将该行的id一起求和。
(3)AVG():盘算指定列的平均值,同SUM()一样,若指定列不是数值类型,则会直接略过。例如
- -- 查询所有员工的平均工资
- SELECT AVG(sal)
- FROM emp;
复制代码 【注】假设emp有10行,此中2活动null,则AVG()会直接略过这两行,分母为8而不是10。
(4)MAX():盘算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算。
(5)MIN():盘算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算。
例如
- -- 查询最高工资和最低工资
- SELECT MAX(sal), MIN(sal)
- FROM emp;
复制代码 2)转换函数
SQL中的转换函数有两种,即CONVERT(类型(长度), 字段名, style)和CAST(字段名 AS 类型(长度))
例如:
- -- 将student表中的字段stuno改为varchar(10)的类型
- -- 解法1
- SELECT CONVERT(varchar(10), stuno) AS stuno, stuname
- FROM student;
- -- 解法2
- SELECT CAST(stuno AS varchar(10)) AS stuno, tsunami
- FROM student;
复制代码 【注】CAST和CONVERT都是用来将一种数据类型转换为另一种数据类型的函数,功能相同,语法差别。但是,在时间转换中,一般使用CONVERT,由于CONVERT多了一个可选参数style,可以将转换得到的时间/日期以差别的格式来展示。例如
- SELECT CONVERT(VARCHAR(19),GETDATE());
- SELECT CONVERT(VARCHAR(10),GETDATE(),10);
- SELECT CONVERT(VARCHAR(10),GETDATE(),110);
- SELECT CONVERT(VARCHAR(11),GETDATE(),6);
- SELECT CONVERT(VARCHAR(11),GETDATE(),106);
- SELECT CONVERT(VARCHAR(24),GETDATE(),113);
复制代码 以上各个语句输出结果分别为:
(该例子来自菜鸟同盟)
CONVERT()中style参数的可取值和结果如下所示(来自菜鸟同盟):
3)日期和时间函数
在SQL中,不能对日期数据执行算数函数,得使用专门的日期函数。常用的日期函数有:
- CURDATE()或CURRENT_DATE():获取当前的体系日期;
- CURTIME()或CURRENT_TIME():获取当前的体系时间;
- NOW():获取当前的体系日期和时间;
- DATE_ADD(date, INTERVAL n keyword):表示在日期date上增加n*keyword,例如DATE_ADD(CURRENT_DATE(), INTERVAL 5 DAY)表示在当前日期加上5天;
- DATEDIFF(日期计数部门, date1, date2):表示date2和date1之间相差多少个日期计数部门,例如DATEDIFF(m, '2024-7-17', '2024-8-17'),返回值为1,表示这两个日期之间相差1个月;
- YEAR(date):返回date中的年份数值;
- MONTH(date):返回date中的月份数值;
- DAY(date):返回date中的天数值;
- HOUR(time):返回time的小时值;
- MINUTE(time):返回time的分钟值;
- DAYOFWEEK(date):返回date是一周中的第几天;
- DAYOFMONTH(date):返回date是一个月中的第几天;
- DAYOFYEAR(date):返回date是一年中的第几天;
- DAYNAME(date):返回date在一周中的星期名,例如DAYNAME(CURDATE())返回“星期三”;
- MONTHNAME(date):返回date的月份名,例如MONTHNAME(CURDATE())返回“七月”;
- QUARTER(date):返回date是一年中的第几个季度;
- WEEK(date):返回date是一年中的第几个周;
【注】SQL中日期的表示方法及有用范围如下所示:
日期部门 | 缩写 | 值 | 日期部门 | 缩写 | 值 | 年 | yy,yyyy | 1753-9999 | 周 | wk,ww | 1-53 | 季度 | qq,q | 1-4 | 小时 | hh | 0-23 | 月 | mm,m | 1-12 | 分钟 | mi,n | 0-59 | 一年中的天 | dy,y | 1-366 | 秒 | ss,s | 0-59 | 一月中的天 | dd,d | 1-31 | 毫秒 | ms | 0-999 | 一周中的天 | dw,w | 1-7 | 微秒 | mcs | 0-999 | 4)字符串函数
- ASCII(char):返回字符的ASCII码值;
- BIT_LENGTH(str):返回字符串的比特长度;
- CONCAT(str1, str2, ..., strn):将str1, str2, ... ,strn连接成一个字符串;
- CONCAT_WS(str1, str2, ..., strn):将str1, str2, ... ,strn连接成一个字符串,并用sep字符隔断;
- INSERT(str, x, y, instr)将字符串str从第x位置开始,y个字符长的子串替换为字符串instr;
- FIND_IN_SET(str, list)分析逗号分隔的list列表,如果发现str,返回str在list中的位置;
- LCASE(str)或LOWER(str)将str中的全部字符改为小写;
- UCASE(str)或UPPER(str)将str中的全部字符改为大写;
- LEFT(str,x)返回字符串str中最左边的x个字符;
- RIGHT(str,x)返回字符串str中最右边的x个字符;
- LENGTH(str)返回字符串str的长度;
- LTRIM(str)删除str开头的空格;
- RTRIM(str)删除str末了的空格;
- TRIM(str)去除字符串开头和末了的全部空格;
- POSITION(substr, str)返回子串substr在字符串str中第一次出现的位置;
- QUOTE(str)用反斜杠转义str中的单引号;
- REPEAT(str, x)返回字符串str重复x次的结果;
- REVERSE(str)返回颠倒字符串str的结果;
- STRCMP(s1, s2)比较字符串s1和s2;
- MID(str, start, length)从str中提取字符,从start位置开始(必填),length为可选项,若省略则默认返回从start位置开始的全部字符;
5)数学函数
- ABS(x)返回x的绝对值;
- BIN(x)返回x的二进制(OCT(x)返回八进制,HEX(x)返回十六进制);
- CEILING(x)返回大于x的最小整数值;
- FLOOR(x)返回小于x的最大整数值;
- EXP(x)返回e(自然对数的底)的x次方;
- GREATEST(x1,x2,...,xn)返回集合中最大的值;
- LEAST(x1,x2,...,xn)返回集合中最小的值;
- LN(x)返回x的自然对数;
- LOG(x, y)返回x的以y为底的对数;
- MOD(x, y)返回x/y的模(余数);
- PI()返回pi(圆周率)的值;
- RAND()返回0到1内的随机值,可以通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值;
- ROUND(x, y)返回参数x的四舍五入的有y位小数的值,若省略y则默认返回整数;
- SIGN(x)返回代表数字x的符号的值;
- SQRT(x)返回一个数的平方根;
- TRUNCATE(x, y)返回数字x截短为y位小数的结果;
6)格式化函数
- FORMAT(column_name, format)对字段的表现按照format格式进行格式化,例如:
- SELECT FORMAT(column_name, format)
- FROM table_name;
- -- 其中,format为规定的格式,必须指定。
- -- 例:查询今年的年份
- SELECT FORMAT(NOW(), 'yyyy') as YEAR
- FROM table_name;
复制代码
- DATE_FORMAT(date, format)对日期字段的表现按照format格式进行格式化 ;
- INET_ATON(ip)返回IP地址的数字表示;
- INET_NTOA(num)返回数字所代表的IP地址;
- TIME_FORMAT(time, format)对时间字段的表现按照format格式进行格式化;
7)条件利用函数
MySQL有5个函数可以用来进行条件利用,具体为
- 简单CASE函数,允许将表达式的值与一组差别的值进行匹配,具体语法为
- CASE [表达式(可以是字段名或其他)]
- WHEN 值1 THEN 结果1
- WHEN 值2 THEN 结果2
- ...
- WHEN 值n THEN 结果n
- ELSE 结果n+1
- END
复制代码
- CASE搜索函数,允许执行更复杂的匹配,例如范围判断等,具体语法为
- CASE
- WHEN 判断条件1 THEN 值1
- WHEN 判断条件2 THEN 值2
- ......
- WHEN 判断条件n THEN 值n
- ELSE 默认值
- END
复制代码
- IF(test, t, f)如果test为真,返回内容t,否则返回内容f;
- IFNULL(result1, result2)如果result1不是空则返回result1,否则返回result2;
- NULLIF(result1, result2)如果result1=result2则返回NULL,否则返回result1;
6. 表连接(紧张)
SQL中,使用join子句(基于表之间的共同目标字段)把来自两个或多个表的行结合起来。
SQL中表连接的具体语法为
- SELECT column1, column2, ...
- FROM table1
- INNER JOIN table2 --内连接
- LEFT JOIN table2 --左连接
- RIGHT JOIN table2 --右连接
- FULL JOIN table2 --全连接
- ON table1.key = table2.key;
复制代码 (1)内连接
内连接inner join要求两个(或多个)表中至少有一个基于目标字段的匹配才能返回行。
(图源:菜鸟同盟)
(2)左连接
左连接left join(是左外链接left outer join的缩写)可以实现即使右表中没有匹配行,也从左表中返回全部的行(相应的右表中的对应字段为null)。
(图源:菜鸟同盟)
(3)右连接
右连接right join(是右外连接right outer join的缩写)可以实现即使左表中没有匹配行,也从右表中返回全部的行(相应的左表中的对应字段为null)。
(图源:菜鸟同盟)
(4)全连接
全连接full join(是全外连接full outer join的缩写)可以实现即使左右表中均没有匹配行,也返回左右表中全部的行(相应的在右表行中,左表的对应字段为null;在左表行中,右表的对应字段为null)。
(图源:菜鸟同盟)
(5)其他增补
- 在表连接中,差别表的匹配字段key不一定要是同一个字段,只要能够用于匹配即可。
- 要实现返回仅左表中存在而右表中不存在的行(如下图所示)则可以使用如下的语法来实现(图源:菜鸟同盟)
- SELECT column1, column2, ...
- FROM table1
- LEFT JOIN table2
- ON table1.key = table2.key
- WHERE table2.key IS NULL;
复制代码
- 要实现返回仅右表中存在而左表中不存在的行(如下图所示)则可以使用如下的语法来实现(图源:菜鸟同盟)
- SELECT column1, column2, ...
- FROM table1
- RIGHT JOIN table2
- ON table1.key = table2.key
- WHERE table1.key IS NULL;
复制代码
- 要实现返回左右表不交叉的数据(如下图所示)则可以使用如下的语法来实现(图源:菜鸟同盟)
- SELECT column1, column2, ...
- FROM table1
- FULL JOIN table2
- ON table1.key = table2.key
- WHERE table1.key IS NULL
- OR table2.key IS NULL;
复制代码 7. UNION利用符
SQL中,用于将两个或多个SELECT语句查询的结果按行进行拼接,使用该利用符时要求每个SELECT语句查询的结果要有相同数目的列。
此中,union利用符默认会去除重复的记载,如果必要保留全部重复记载,可以使用union all利用符。具体如下
- SELECT column1, column2, ...
- FROM table1
- UNION (ALL)
- SELECT column1, column2, ...
- FROM table2;
复制代码 8. SELECT INTO语法
SQL中,使用select into语法从一个表中选取(部门)数据并插入到另一个(新)表中。具体如下
- SELECT column1, column2, ...
- INTO 新表名
- FROM 表名;
复制代码 【注1】select into语法只是提供了一个将查询结果插入到新表中的方法,具体要查询哪些内容,可以依据DQL进行各种灵活的利用;
【注2】MySQL数据库不支持select...into语句,应改用insert into..select...语句,具体如下
- INSERT INTO 新表名
- SELECT column1, column2, ...
- FROM 表名;
复制代码 【注3】若要直接复制表的布局及数据,可以直接使用如下的简单利用
- CREATE TABLE 新表名
- AS
- SELECT * FROM 旧表名;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|