-
SELECT语句定义和Select语句完整的执行顺序
2019-03-28 14:55:15SELECT语句定义: 一个完成的SELECT语句包含可选的几个子句。SELECT语句的定义如下: <SELECT clause> [<FROM clause>] [<WHERE clause>] [<GROUP BY clause>] [<HAVING clause>]...SELECT语句定义:
一个完成的SELECT语句包含可选的几个子句。SELECT语句的定义如下: <SELECT clause> [<FROM clause>] [<WHERE clause>] [<GROUP BY clause>] [<HAVING clause>] [<ORDER BY clause>] [<LIMIT clause>] SELECT子句是必选的,其它子句如WHERE子句、GROUP BY子句等是可选的。 一个SELECT语句中,子句的顺序是固定的。例如GROUP BY子句不会位于WHERE子句的前面。
SELECT语句执行顺序
SELECT语句中子句的执行顺序与SELECT语句中子句的输入顺序是不一样的,所以并不是从SELECT子句开始执行的,而是按照下面的顺序执行: 开始->FROM子句->WHERE子句->GROUP BY子句->HAVING子句->ORDER BY子句->SELECT子句->LIMIT子句->最终结果 每个子句执行后都会产生一个中间结果,供接下来的子句使用,如果不存在某个子句,就跳过
SQL Select语句完整的执行顺序:
1、from子句组装来自不同数据源的数据; 2、where子句基于指定的条件对记录行进行筛选; 3、group by子句将数据划分为多个分组; 4、使用聚集函数进行计算; 5、使用having子句筛选分组; 6、计算所有的表达式; 7、select 的字段; 8、使用order by对结果集进行排序。
SQL语言不同于其他编程语言的最明显特征是处理代码的顺序。在大多数据库语言中,代码按编码顺序被处理。但在SQL语句中,第一个被处理的子句式FROM,而不是第一出现的SELECT。SQL查询处理的步骤序号:
(1) FROM <left_table> (3) <join_type> JOIN <right_table> (2) ON <join_condition> (4) WHERE <where_condition> (5) GROUP BY <group_by_list> (6) WITH {CUBE | ROLLUP} (7) HAVING <having_condition> (8) SELECT (9) DISTINCT (9) ORDER BY <order_by_list> (10) <TOP_specification> <select_list>
以上每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只有最后一步生成的表才会会给调用者。如果没有在查询中指定某一个子句,将跳过相应的步骤。
逻辑查询处理阶段简介:
1、 FROM:对FROM子句中的前两个表执行笛卡尔积(交叉联接),生成虚拟表VT1。 2、 ON:对VT1应用ON筛选器,只有那些使为真才被插入到TV2。 3、 OUTER (JOIN):如果指定了OUTER JOIN(相对于CROSS JOIN或INNER JOIN),保留表中未找到匹配的行将作为外部行添加到VT2, 生成TV3。如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的 表位置。 4、 WHERE:对TV3应用WHERE筛选器,只有使为true的行才插入TV4。 5、 GROUP BY:按GROUP BY子句中的列列表对TV4中的行进行分组,生成TV5。 6、 CUTE|ROLLUP:把超组插入VT5,生成VT6。 7、 HAVING:对VT6应用HAVING筛选器,只有使为true的组插入到VT7。 8、 SELECT:处理SELECT列表,产生VT8。 9、 DISTINCT:将重复的行从VT8中删除,产品VT9。 10、ORDER BY:将VT9中的行按ORDER BY子句中的列列表顺序,生成一个游标(VC10)。 11、TOP:从VC10的开始处选择指定数量或比例的行,生成表TV11,并返回给调用者。
-
INSERT INTO SELECT语句与SELECT INTO FROM语句区别
2019-06-21 19:04:56INSERT INTO SELECT语句与SELECT INTO FROM语句区别 2017年07月27日 09:52:03 皇冠carryman 阅读数 50281 版权声明:本文可能是博主原创文章,也可能是博主抢来的文章,崇尚开源,共产社会没有什么属于自己的~ ...INSERT INTO SELECT语句与SELECT INTO FROM语句区别
2017年07月27日 09:52:03 皇冠carryman 阅读数 50281
版权声明:本文可能是博主原创文章,也可能是博主抢来的文章,崇尚开源,共产社会没有什么属于自己的~ https://blog.csdn.net/weixin_39415084/article/details/76170240
1.INSERT INTO SELECT语句
语句形式为:Insert into Table2(field1,field2,…) select value1,value2,… from Table1
或者:Insert into Table2 select * from Table1
注意:
(1)要求目标表Table2必须存在,并且字段field,field2…也必须存在(2)注意Table2的主键约束,如果Table2有主键而且不为空,则 field1, field2…中必须包括主键
(3)注意语法,不要加values,和插入一条数据的sql混了,不要写成:
Insert into Table2(field1,field2,…) values (select value1,value2,… from Table1)
由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。示例如下:
--1.创建测试表 create TABLE Table1 ( a varchar(10), b varchar(10), c varchar(10) ) create TABLE Table2 ( a varchar(10), c varchar(10), d int ) --2.创建测试数据 Insert into Table1 values('赵','asds','90') Insert into Table1 values('钱','asds','100') Insert into Table1 values('孙','asds','80') Insert into Table1 values('李','asds',null) select * from Table2 --3.INSERT INTO SELECT语句复制表数据部分列和常值 Insert into Table2(a, c, d) select a,c,5 from Table1 或:Insert into Table2 select * from Table1 --4.显示更新后的结果 select * from Table2 --5.删除测试表 drop TABLE Table1 drop TABLE Table2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
2.SELECT INTO FROM语句
语句形式为:SELECT vale1, value2 into Table2 from Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。示例如下:
--1.创建测试表 create TABLE Table1 ( a varchar(10), b varchar(10), c varchar(10) ) --2.创建测试数据 Insert into Table1 values('赵','asds','90') Insert into Table1 values('钱','asds','100') Insert into Table1 values('孙','asds','80') Insert into Table1 values('李','asds',null) --3.SELECT INTO FROM语句创建表Table2并复制数据 select a,c INTO Table2 from Table1 --4.显示更新后的结果 select * from Table2 --5.删除测试表 drop TABLE Table1 drop TABLE Table2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
注意:如果在sql/plus或者PL/SQL执行这条语句,会报”ORA-00905:缺失关键字”错误,原因是PL/Sql与T-SQL的区别。
T-SQL中该句正常,但PL/SQL中解释是:
select..into is part of PL/SQL language which means you have to use it inside a PL/SQL block. You can not use it in a SQL statement outside of PL/SQL.
即不能单独作为一条sql语句执行,一般在PL/SQL程序块(block)中使用。如果想在PL/SQL中实现该功能,可使用Create table newTable as select * from …:
如: create table NewTable as select * from ATable;NewTable 除了没有键,其他的和ATable一样
———SQL SELECT INTO语法介绍
SQL SELECT INTO 语句可用于创建表的备份复件。
SELECT INTO 语句
SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。
SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。
SQL SELECT INTO 语法
您可以把所有的列插入新表:
SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename
或者只把希望的列插入新表:
SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_tablename
SQL SELECT INTO 实例 - 制作备份复件
下面的例子会制作 “Persons” 表的备份复件:
SELECT * INTO Persons_backup FROM Persons
IN 子句可用于向另一个数据库中拷贝表:
SELECT * INTO Persons IN ‘Backup.mdb’ FROM Persons
如果我们希望拷贝某些域,可以在 SELECT 语句后列出这些域:
SELECT LastName,FirstName
INTO Persons_backup
FROM Persons
SQL SELECT INTO 实例 - 带有 WHERE 子句
我们也可以添加 WHERE 子句。
下面的例子通过从 “Persons” 表中提取居住在 “Beijing” 的人的信息,创建了一个带有两个列的名为 “Persons_backup” 的表:
SELECT LastName,Firstname INTO Persons_backup FROM Persons WHERE City=’Beijing’
SQL SELECT INTO 实例 - 被连接的表
从一个以上的表中选取数据也是可以做到的。
下面的例子会创建一个名为 “Persons_Order_Backup” 的新表,其中包含了从 Persons 和 Orders 两个表中取得的信息:
SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P -
嵌套select语句
2017-08-28 16:17:13嵌套的select语句 这种方式是使用一条单独的select语句来加载关联的实体(在本例中就是教师实体),然后在association元素中引用此select语句(注:此方法会产生N+1问题,关于这个问题可参考本系列博客中的...嵌套的select语句
这种方式是使用一条单独的select语句来加载关联的实体(在本例中就是教师实体),然后在association元素中引用此select语句(注:此方法会产生N+1问题,关于这个问题可参考本系列博客中的“MyBatis中的N+1问题”)
association元素的属性javaType="Teacher"也可以不要,这是因为引用的select语句中已经指明了要用到的resultMap。
<?xml version="1.0" encoding="utf8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.abc.mapper.StudentMapper"> <select id="getById" parameterType="int" resultMap="studentResultMap"> select id,name,gender,major,grade,supervisor_id from student where id=#{id} </select> <select id="selectSupervisor" parameterType="int" resultMap="supervisorResultMap"> select id,name,gender,title,research_area from teacher where id=#{id} </select> <resultMap id="studentResultMap" type="Student"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="gender" column="gender"/> <result property="major" column="major"/> <result property="grade" column="grade"/> <!--column="supervisor_id"不能少。此列的值作为参数 传递给要引用的select语句,用来查询相应学生的指导教师 的信息。select属性指定要引用的select语句--> <association property="supervisor" javaType="Teacher" column="supervisor_id" select="selectSupervisor"/> </resultMap> <!--教师实体映射--> <resultMap id="supervisorResultMap" type="Teacher"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="gender" column="gender"/> <result property="researchArea" column="research_area"/> <result property="title" column="title"/> </resultMap> </mapper>
-
SQLite Select 语句
2018-01-25 12:29:30SQLite的SELECT语句用于从SQLite数据库表中获取数据,以结果表的形式返回数据。这些结果表也被称为结果集。 语法 SQLite的SELECT语句的基本语法如下: SELECT column1, column2, columnN FROM table_name;...SQLite的SELECT语句用于从SQLite数据库表中获取数据,以结果表的形式返回数据。这些结果表也被称为结果集。
语法
SQLite的SELECT语句的基本语法如下:
SELECT column1, column2, columnN FROM table_name;
SELECT * FROM table_name;
实例假设COMPANY表有以下记录:
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
下面是一个实例,使用SELECT语句获取并显示所有这些记录。在这里,前三个命令被用来设置正确格式化的输出。
sqlite>.header on sqlite>.mode column sqlite> SELECT * FROM COMPANY;
最后,将得到以下结果:
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
如果只想获取COMPANY表中指定的字段,则使用下面的查询:
sqlite> SELECT ID, NAME, SALARY FROM COMPANY;
上面的查询会产生以下结果:
ID NAME SALARY ---------- ---------- ---------- 1 Paul 20000.0 2 Allen 15000.0 3 Teddy 20000.0 4 Mark 65000.0 5 David 85000.0 6 Kim 45000.0 7 James 10000.0
设置输出列的宽度
有时,由于要显示的列的默认宽度导致.mode column, 这种情况下,输出被截断。此时,你可以使用.width num,num...命令设置显示列的宽度,如下所示:
sqlite>.width 10, 20, 10 sqlite>SELECT * FROM COMPANY;
上面的.width命令设置第一列的宽度为10,第二列的宽度为20,第三列的宽度为10,因此上述SELECT语句将得到以下结果:
ID NAME AGE ADDRESS SALARY ---------- -------------------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Schema信息
因为所有的点命令只在SQLite提示符中可用,所以当您进行带有SQLite的编程中,你要使用下面的带有sqlite_master表的SELECT语句来列出所有在数据库中创建的表:
sqlite> SELECT tbl_name FROM sqlite_master WHERE type = 'table';
> SELECT tbl_name FROM sqlite_master WHERE type = 'table';假设在testDB.db中已经存在唯一的COMPANY表,则将产生以下结果:
tbl_name ---------- COMPANY
你可以列出关于COMPANY表的完整信息,如下所示:
sqlite> SELECT sql FROM sqlite_master WHERE type = 'table' AND tbl_name = 'COMPANY';
假设在testDB.db中已经存在唯一的COMPANY表,则将产生以下结果:
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL )
参考:
https://www.yuque.com/docs/share/069f52c9-4fb7-4245-a004-5424aae1c72d
-
SELECT 语句详解
2017-08-11 14:54:27建立三张表:department 、employee 、 ...(1)SELECT语句的基本格式为: SELECT 要查询的列名 FROM 表名 WHERE 限制条件 ps:如果要查询表的所有内容,则把要查询的列名用一个星号 * 表示。 例子:《1》查 -
Insert into select语句把生产服务器炸了
2020-04-23 10:08:09场景: 使用MySQL存储千万级数据量并根据城市进行分表,从总表对分表插入数据时很慢很慢 原因: 在默认的事务隔离级别下: ...使用insert into tablA select * from tableB语句时,一定要确保tableB后面的where,... -
select 语句的一般格式
2018-06-01 18:31:13select 语句是sql的核心语句,语句成分丰富多样,总结如下: select语句的一般格式: select 【all/distinct】目标列表达式 别名,。。。。from 表名或视图名或者(select语句)as 表名(属性)where 条件表达式... -
MySQL-SELECT 语句详解
2017-02-14 08:41:12在数据库操作语句中,使用最频繁,也被认为最重要的是 SELECT 查询语句。之前的实验中,我们已经在不少地方用到了 SELECT * FROM ...1、基本的SELECT语句 SELECT 语句的基本格式为: SELECT 要查询 -
mysql 的 update select 语句
2019-08-02 13:35:48以下是udpate select 语句的例子,结构与select 比较相似 UPDATE table1 INNER JOIN table2 ON table1.id = table2.fk_id SET col1 = table2.col1, col2 = table2.col2 -
select语句和update语句的耗时比较
2019-04-20 11:32:03问题: select语句和update语句的耗时比较 描述: 比如说,目标都是某一条记录,对其进行查询或更新操作,在用时上有什么不同呢 解决方案1: 这种比较没什么意义。需要注意的一点是,select 涉及的是共享锁, 在... -
MySQL SELECT 语句
2014-07-09 23:31:13SELECT语句: products表如下: a 从一个表中选出一列 :mysql> SELECT prod_name FROM products; b 从表中检索多个列:mysql>SELECT prod_id, prod_name FROM products; c 检索所有列:mysql> SELECT * FROM ... -
Go语言-select语句
2018-05-02 21:25:18select语句属于条件分支流程控制方法,不过它只能用于通道。它可以包含若干条case语句,并根据条件选择其中的一个执行。进一步说,select语句中的case关键字只能后跟用于通道的发送操作的表达式以及接收操作的表达式... -
Oracle之SELECT语句
2016-10-16 17:26:011.SELECT语句select * from t_c11_dxmb;(1)SELECT关键字后面需要跟要查询的列名,如果要查询该表中的所有列,可以使用*来代替所有的列名,然后跟着FROM关键字,FROM关键字后面紧跟着要查找字段所在的表的表名,... -
SQL如何使两个select语句查询结果合并一个?
2014-05-26 18:27:37查询语句1 select unit,count(*)as number from archives_management group by unit 查询语句2 select fine_units,count(*) as fine_number from fine group by fine_units [img=... -
mysql INSERT INTO SELECT语句
2018-04-02 17:47:30INSERT INTO SELECT语句,今天第一次见到,第一眼以为就是插入数据,然后仔细一看,怎么跟insert into不一样,后面有个select是什么鬼。插入查询吗,见到没有看到过的语句当然是去搜一搜手册:手册看完手册再自己... -
SQL中SELECT语句详解
2018-06-04 17:12:25本篇文章讲述SQL语句中的SELECT查询语句,以供参考,如有错误或不当之处还望大神们告知。 简单查询SELECT-FROM 用于无条件查询单张表中的行或列 假设有表如图所示 查询名字叫 ‘叶清逸’ 的记录: select... -
Oracle select语句执行顺序
2016-08-21 20:34:35oracle select语句执行顺序及各部分功能详解 -
sql server select 语句中包含子select语句问题
2018-10-09 18:21:06SELECT code, (SELECT company FROM apprai_code WHERE sj_code='sj_code1') FROM apprai_code_record WHERE code='code1' 这句代码的意思是查询apprai_code_record 表里当code='code1’的code值,同时查询apprai... -
MySQL-SQL语句中SELECT语句的执行顺序
2015-01-16 15:31:08SELECT语句的执行顺序大家比较少关注,下面将为您详细介绍SQL语句中SELECT语句的执行顺序,供您参考,希望对您能够有所帮助。 SELECT语句的执行的逻辑查询处理步骤: (8)SELECT (9)DISTINCT (11) (1)FROM ... -
数据库之SQL(基础SELECT语句及ORDER BY 语句)
2018-07-07 20:34:34SQL中的查询语句还是很多的,看得有没有眼花缭乱吖,现在让我们一起以问题的形式来过一下SELECT的查询语句吧^_^一、我们在SQL中常见的SELECT语句有哪些?二、如何查询数据表中的全部数据?1.select list(*全部) from... -
sql批量插入数据INSERT INTO SELECT语句
2018-12-18 17:13:25INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1 或者:Insert into Table2 select * from Table1 注意:(1)要求目标表Table2必须存在,并且... -
多个Select语句嵌套
2016-05-30 19:38:43多个Select语句嵌套,据说最多是七层,没试过,这里是三层。 -
深入学习、理解select语句、delete语句以及其他SQL语句
2016-01-20 21:44:35深入理解select语句、SQL语句 我们从一个例子出发:删除表中字段的语句:(以mysql5.5数据库为例) 1,delete from user as u where u.userid=6; 2,delete from user u where u.userid=6; 3,delete from user ... -
SQL嵌套SELECT语句的用法
2014-07-21 14:31:39SQL嵌套SELECT语句是很常见的SQL语句,下面就为您详细介绍SQL嵌套SELECT语句的语法,并附相关示例,供您参考学习之用。 嵌套SELECT语句也叫子查询,一个SELECT 语句的查询结果能够作为另一个语句的输入值。子查询... -
CREATE TABLE 表名 AS SELECT 语句
2018-08-08 14:19:07CREATE TABLE 表名 AS SELECT 语句 1.新表不存在 复制表结构即数据到新表 1 2 create table new_table select * from old_talbe; 这种方法会将old_table中所有的内容都拷贝过来,用这种方法需要注意,new_table... -
嵌套SELECT语句(子查询)
2016-06-29 16:17:50嵌套SELECT语句也叫子查询,形如: SELECT name FROM bbc WHERE region = (SELECT region FROM bbc WHERE name = 'Brazil') 一个 SELECT 语句的查询结果可以作为另一个语句的输入值。 上面的SQL... -
select语句的子句以及子查询
2019-06-04 23:45:551.select语句的各个子句 按顺序: (1)from:从哪些表中筛选 (2)where:从表中筛选的条件 (3)group by:分组依据 (4)having:在统计结果中再次筛选 (5)order by:排序 (6)limit:分页 having与where的... -
SQL 检索数据(select语句)
2018-09-24 21:31:10SELECT语句用于从一个或多个表中检索信息。 检索单个列 命令 SELECT 列名 FROM 表名; 注意:语句将返回表中所有行,数据没有过滤(过滤将得出结果集的一个子集),也没有排序。 检索多个列 命令 SELECT ... -
原来select语句在MySQL中是这样执行的!看完又涨见识了!这回我要碾压面试官!
2021-04-03 08:41:09一文搞懂MySQL的分层架构和select语句在MySQL中的执行流程!