sql笔记

这篇博客详细介绍了SQL的各种操作,包括SELECT DISTINCT、WHERE子句、JOIN操作、聚合函数等,还涵盖了数据的插入、更新和删除。文章通过实例解释了SQL语句的执行顺序,帮助读者理解SQL在数据库管理中的应用。

https://www.w3cschool.cn/mysql/

MySQL

 

开始:mysql -u root -p;

 

列出数据库管理系统的数据库列表:SHOW DATABASES;   

 

使用mysqladmin 创建数据库:mysqladmin -u root -p create W3CSCHOOL;

 

选择数据库:use W3CSCHOOL;       

 

在Mac终端导入.sql文件:http://www.cnblogs.com/zhengbin/p/4749938.html

"mysql -u root -p

create database name;

use name;

source 『将.sql文件直接拖拽至终端,自动补全其文件目录』

 

在Mac终端导出.sql文件:

"cd 『打开要将.sql文件生成的文件位置』

mysqldump -u root -p database_name>sql_name.sql"

       

创建数据表:

创建MySQL数据表需要以下信息:表名、表字段名、定义每个表字段

CREATE TABLE table_name (column_name column_type);

eg:CREATE TABLE w3cschool_tbl(

   -> w3cschool_id INT NOT NULL AUTO_INCREMENT,

   -> w3cschool_title VARCHAR(100) NOT NULL,

   -> w3cschool_author VARCHAR(40) NOT NULL,

   -> submission_date DATE,

   -> PRIMARY KEY ( w3cschool_id )

   -> );

注意:MySQL命令终止符为分号(;)

 

 

https://github.com/CyC2018/Interview-Notebook/blob/master/notes/SQL%20语法.md

http://www.w3school.com.cn/sql/index.asp

SQL

SQL语句不区分大小写,但是数据库表名、列名和值是否区分依赖于具体的DBMS 以及配置。

 

SQL DML 和DDL

可以把SQL 分为两个部分:数据操作语言(DML) 和 数据定义语言(DDL)。

 

SQL (结构化查询语言)是用于执行查询的语法。但是SQL语言也包含用于更新、插入和删除记录的语法。查询和更新指令构成了SQL 的DML 部分:

  • SELECT -从数据库表中获取数据
  • UPDATE -更新数据库表中的数据
  • DELETE -从数据库表中删除数据
  • INSERT INTO -向数据库表中插入数据

 

SQL的数据定义语言(DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。SQL 中最重要的DDL 语句: 

  • CREATE DATABASE -创建新数据库
  • ALTER DATABASE -修改数据库
  • CREATE TABLE -创建新表
  • ALTER TABLE -变更(改变)数据库表
  • DROP TABLE -删除表
  • CREATE INDEX -创建索引(搜索键)
  • DROP INDEX -删除索引

 

 

SQL SELECT 语法

注意如果有两个以上的表,select from前后列和表的序要对应出的列序也要对应

SELECT 列名称 FROM 表名称 #提取某一列

以及

SELECT * FROM 表名称 #提取所有列

 

 

SQL SELECT DISTINCT 语句

SELECT DISTINCT 列名称 FROM 表名称 #删去了重复值

Eg:

SELECT DISTINCT Company FROM Orders 

 

 

WHERE子句

有条件地从表中选取数据

SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

Eg:如果只希望选取居住在城市"Beijing" 中的人,我们需要向SELECT 语句添加WHERE 子句:

SELECT * FROM Persons WHERE City='Beijing'

下面的运算符可在WHERE 子句中使用:

=     等于

<>  不等于

>     大于

<     小于

>=  大于等于

<=  小于等于

BETWEEN  在某个范围内

LIKE     搜索某种模式

注释:在某些版本的SQL 中,操作符<> 可以写为!=。

 

AND和OR 运算符

使用AND 来显示所有姓为"Carter" 并且名为"Thomas" 的人:

SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'

使用OR 来显示所有姓为"Carter" 或者名为"Thomas" 的人:

SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'

 

ORDER BY 语句

ORDER BY 语句用于根据指定的列对结果集进行排序。

ORDER BY 语句默认按照升序对记录进行排序。

如果您希望按照降序对记录进行排序,可以使用DESC 关键字。

Eg:

以字母顺序显示公司名称:

SELECT Company, OrderNumber FROM Orders ORDER BY Company

以逆字母顺序显示公司名称:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

以逆字母顺序显示公司名称,并以数字顺序显示顺序号:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

 

INSERT INTO 语句

向表格中插入新的行。

INSERT INTO 表名称 VALUES (值1, 值2,....)

Eg

INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')

指定所要插入数据的列:

INSERT INTO表名称(列1, 列2,...) VALUES (值1, 值2,....)

Eg:

INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')

 

Update 语句

修改表中的数据。

UPDATE 表名称SET 列名称新值WHERE 列名称某值

Eg:更新某一行中的若干列。修改地址(address),并添加城市名称(city):

UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson'

 

DELETE语句

删除表中的行。

DELETE FROM 表名称 WHERE 列名称 = 值

删除所有行

DELETE FROM表名称

或者:

DELETE * FROM表名称

 

TOP & limit子句

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

注释:并非所有的数据库系统都支持TOP 子句。

SQL Server 的语法:

SELECT TOP number|percent 列名称(s) FROM 表名称

Eg:从"Persons" 表中选取头两条记录

SELECT TOP 2 * FROM Persons

MySQL 语法:用limit这个!limit放order后

LIMIT m,n : 表示从第m+1条开始,取n条数据; 

LIMIT n 表示从第0条开始,取n条数据,是limit(0,n)写。

SELECT column_name(s)

FROM table_name

LIMIT number

Eg

SELECT *

FROM Persons

LIMIT 5

 

LIKE操作符

LIKE 操作符用于在WHERE 子句中搜索列中的指定模式。

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern

Eg:选取居住在以"N" 开始的城市里的人:

SELECT * FROM Persons
WHERE City LIKE 'N%'

注:"%"可用于定义通配符(模式中缺少的字母)。

包含N: ‘%N%’

 

SQL通配符

通配符可以替代一个或多个字符,必须与LIKE 运算符一起使用。

%    替代一个或多个字符

_     仅替代一个字符

[字符]   字符列中的任何单一字符

[^字符] 或者[!字符]  不在字符列中的任何单一字符

 

IN操作符

允许在 WHERE 子句中规定多个值。

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)

还有not innot exist

 

IN和EXISTS用法比较

IN:确定给定的值是否与子查询或列表中的值相匹配。

EXISTS:指定一个子查询,检测行的存在。存在则返回true,否则返回false。

EXISTS 的語法是:

SELECT "欄位1" FROM "表格1"
WHERE EXISTS (SELECT * FROM "表格2"WHERE "條件");

 

MySQL 目前還不支持EXISTS。

 

 CASE when:SQL 用來作为IF-THEN-ELSE 之类逻辑的关键字

https://www.1keydata.com/tw/sql/sql-case.html

SELECT CASE ("位名")
  WHEN "
條件1" THEN "結果1"
  WHEN "
條件2" THEN "結果2"
  ...
  [ELSE "
結果N"]
  END
FROM "
表格名";

Eg:'Los Angeles' Sales 數值乘以2,以及將'San Diego' Sales 數值乘以1.5,我們就鍵入以下的SQL

SELECT Store_Name, CASE Store_Name
  WHEN 'Los Angeles' THEN Sales * 2
  WHEN 'San Diego' THEN Sales * 1.5
  ELSE Sales
  END
"New Sales",
Txn_Date
FROM Store_Information;

Eg: 转换:如性别在表中存的是数字1、2,但是希望查询出来男、女时,可以这样:

select (case Gender when 1 then '男' when 2 then '女' else '其他' end) as Gender from Table1

Eg: 将sum与case结合使用,可以实现分段统计。如果现在希望将上表中各种性别的人数进行统计,sql语句如下:https://www.cnblogs.com/Richardzhu/p/3571670.html

select
 sum(case u.sex when 1 then 1 else 0 end) as 男性,
 sum(case u.sex when 2 then 1 else 0 end) as女性,
 sum(case when u.sex <>1 and u.sex<>2 then 1 else 0 end)as性别为空 
 from users u; #<>表示不等于,也可写为!=
        男性         女性       性别为空
---------- ---------- ----------
         3          2          0

 

BETWEEN操作符

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

SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2 #包括value1不包括value2

 

SQL AS为列名称和表名称指定别名(Alias)

表的SQL Alias 语法

SELECT column_name(s)
FROM table_name
AS alias_name #可省略as但强烈建议写上

列的SQL Alias 语法

SELECT column_name AS alias_name
FROM table_name

Eg: 表的as:

假设我们有两个表分别是:"Persons" 和"Product_Orders"。我们分别为它们指定别名"p" 和"po"。现在,我们希望列出"John Adams" 的所有定单。我们可以使用下面的SELECT 语句:

SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'

Eg: 列的as

SELECT LastName AS Family, FirstName AS Name
FROM Persons

 

 

SQL join

根据两个或多个表中的列之间的关系,从两个或更多的表中获取结果.

数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。

Eg:引用两个表,从两个表中获取数据:谁订购了产品,并且他们订购了什么产品?

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo #注意不同表的列名用’表*.列名’区分
FROM Persons #表1
INNER JOIN Orders #表2
ON Persons.Id_P = Orders.Id_P #主键(Primary Key)
ORDER BY Persons.LastName #列名,由某一列排序

下面列出了您可以使用的JOIN 类型,以及它们之间的差异。

  • INNER JOIN: 如果表中全部匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行
    INNER JOIN 表同对应的数据,即任何一缺失数据就不示。
    LEFT JOIN 取左数据表的全部数据,即便右表无对应数据。
    RIGHT JOIN 取右数据表的全部数据,即便左表无对应数据。

 

在使用left jion时,on和where条件的区别如下:

1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

inner join on 比直接where的查询效率要高

inner join on 后面的条件已经把结果过滤了一遍,而where 则是把限制条件放到最后,执行最后一次查询前结果里值变多了,查询起来变慢了,效率自然变低了。

然而,对于一般的内联接来说,就是没用例如上面的b.state=1这类的多一层限制,它和where的效率是一样的。而且where在写法上简单,因此对单表的查询一般都用where即可。

https://my.oschina.net/jun24bryant/blog/787375

 

SQL UNION 操作符

UNION 操作符用于合并两个或多个SELECT 语句的结果集。

请注意,UNION 内部的SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条SELECT 语句中的列的顺序必须相同。

SQL UNION 语法:删去重复值

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

SQL UNION ALL 语法:返回所有值,保留重复值

SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

另外,UNION 结果集中的列名总是等于UNION 中第一个SELECT 语句中的列名。

 

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

 

CREATE DATABASE 语句

创建数据库。

CREATE DATABASE database_name

 

CREATE TABLE 语句

创建数据库中的表。

CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)

eg:本例演示如何创建名为"Person" 的表。该表包含5 个列,列名分别是:"Id_P"、"LastName"、"FirstName"、"Address" 以及"City":

CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

 

SQL约束

约束用于限制加入表的数据的类型。

可以在创建表时规定约束(通过CREATE TABLE 语句),或者在表创建之后也可以(通过ALTER TABLE 语句)。

我们将主要探讨以下几种约束:

· NOT NULL:强制字段始终包含值

· UNIQUE、PRIMARY KEY主健:UNIQUE 和PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。PRIMARY KEY 拥有自动定义的UNIQUE 约束。每个表可以有多个UNIQUE 约束,但是每个表只能有一个PRIMARY KEY 约束。

· FOREIGN KEY外健:用于预防破坏表之间连接的动作。也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

· CHECK:用于限制列中的值的范围。如果对单个列定义CHECK 约束,那么该列只允许特定的值。如果对一个表定义CHECK 约束,那么此约束会在特定的列中对值进行限制。

· DEFAULT:用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。

 

索引index

您可以在表中创建索引,以便更加快速高效地查询数据。

用户无法看到索引,它们只能被用来加速搜索/查询。

注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

SQL CREATE INDEX 语法

在表上创建一个简单的索引。允许使用重复的值:

CREATE INDEX index_name
ON table_name (column_name)

注释:"column_name"规定需要索引的列。

 

DROP 

删除索引、表和数据库。

 

ALTER TABLE 语句

在已有的表中添加、修改或删除列。

 

Auto-increment 

记录插入表中时生成一个唯一的数字

 

SQL CREATE VIEW 语句

什么是视图?

在SQL 中,视图是基于SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及JOIN语句,我们也可以提交数据,就像这些来自于某个单一的表。

注释:数据库的设计和结构不会受到视图中的函数、where 或join 语句的影响。

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

注释:视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用SQL 语句来重建数据。

 

SQL日期

MySQL 中最重要的内建日期函数:

函数

描述

NOW()

返回当前的日期和时间

CURDATE()

返回当前的日期

CURTIME()

返回当前的时间

DATE()

提取日期或日期/时间表达式的日期部分

EXTRACT()

返回日期/时间按的单独部分

DATE_ADD()

给日期添加指定的时间间隔

DATE_SUB()

从日期减去指定的时间间隔

DATEDIFF()

返回两个日期之间的天数

DATE_FORMAT()

用不同的格式显示日期/时间

SQL Server 中最重要的内建日期函数:

函数

描述

GETDATE()

返回当前日期和时间

DATEPART()

返回日期/时间的单独部分

DATEADD()

在日期中添加或减去指定的时间间隔

DATEDIFF()

返回两个日期之间的时间

CONVERT()

用不同的格式显示日期/时间

SQL Date 数据类型

MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:

  • DATE - 格式YYYY-MM-DD
  • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
  • YEAR - 格式YYYY 或YY

SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:

  • DATE - 格式YYYY-MM-DD
  • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式: 唯一的数字

 

SQL函数

内建SQL 函数的语法是:

SELECT function(列) FROM 表

函数的类型

在SQL 中,基本的函数类型和种类有若干种。函数的基本类型是:

  • Aggregate 函数
  • Scalar 函数

合计函数(Aggregate functions)

Aggregate 函数的操作面向一系列的值,并返回一个单一的值。

注释:如果在SELECT 语句的项目列表中的众多其它表达式中使用SELECT 语句,则这个SELECT 必须使用GROUP BY 语句!

MS Access 中的合计函数

函数

描述

AVG(column)

返回某列的平均值

COUNT(column)

返回某列的行数(不包括 NULL 值)

COUNT(*)

返回被选行数

FIRST(column)

返回在指定的域中第一个记录的值

LAST(column)

返回在指定的域中最后一个记录的值

MAX(column)

返回某列的最高值

MIN(column)

返回某列的最低值

STDEV(column)

 

STDEVP(column)

 

SUM(column)

返回某列的总和

VAR(column)

 

VARP(column)

 

在SQL Server 中的合计函数

函数

描述

AVG(column)

返回某列的平均值

BINARY_CHECKSUM

 

CHECKSUM

 

CHECKSUM_AGG

 

COUNT(column)

返回某列的行数(不包括NULL值)

COUNT(*)

返回被选行数

COUNT(DISTINCT column)

返回相异结果的数目

FIRST(column)

返回在指定的域中第一个记录的值(SQLServer2000 不支持)

LAST(column)

返回在指定的域中最后一个记录的值(SQLServer2000 不支持)

MAX(column)

返回某列的最高值

MIN(column)

返回某列的最低值

STDEV(column)

 

STDEVP(column)

 

SUM(column)

返回某列的总和

VAR(column)

 

VARP(column)

 

Scalar函数

Scalar 函数的操作面向某个单一的值,并返回基于输入值的一个单一的值。

MS Access 中的Scalar 函数

函数

描述

UCASE(c)

将某个域转换为大写

LCASE(c)

将某个域转换为小写

MID(c,start[,end])

从某个文本域提取字符

LEN(c)

返回某个文本域的长度

INSTR(c,char)

返回在某个文本域中指定字符的数值位置

LEFT(c,number_of_char)

返回某个被请求的文本域的左侧部分

RIGHT(c,number_of_char)

返回某个被请求的文本域的右侧部分

ROUND(c,decimals)

对某个数值域进行指定小数位数的四舍五入

MOD(x,y)

返回除法操作的余数

NOW()

返回当前的系统日期

FORMAT(c,format)

改变某个域的显示方式

DATEDIFF(d,date1,date2)

用于执行日期计算

 

SUM()函数

SUM 函数返回数值列的总数(总额),返回的是一个数。

Eg: 查找"OrderPrice" 字段的总数。

SELECT SUM(OrderPrice) AS OrderTotal FROM Orders

结果集类似这样:

OrderTotal

5700

 

 

GROUP BY 语句

http://www.w3school.com.cn/sql/sql_groupby.asp

用于结合合计sum函数,根据一个或多个列对结果集进行分组。

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

Eg:查找每个客户的总金额(总订单)。

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer #group by删去了Customer列中的重复值

也可以对一个以上的列应用GROUP BY 语句,就像这样:

SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
GROUP BY Customer,OrderDate

 

HAVING子句

在SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数group by一起使用。

 where 子句的作用是在对查询结行分前,将不符合where条件的行去掉,即在分之前过滤数据,条件中不能包含聚函数,使用where条件示特定的行。
  having 子句的作用是筛选满足条件的,即在分之后过滤数据,条件中常包含聚函数,使用having 条件示特定的,也可以使用多个分组标行分

WHERE语句在GROUP BY语句之前SQL会在分之前WHERE语句。   
HAVING语句在GROUP BY语句之后SQL会在分之后HAVING语句

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value

Eg:查找订单总金额少于2000 的客户。

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000

Eg:查找客户"Bush" 或"Adams" 拥有超过1500 的订单总金额。

在SQL 语句中增加了一个普通的WHERE 子句:

SELECT Customer,SUM(OrderPrice) FROM Orders
WHERE Customer='Bush' OR Customer='Adams'
GROUP BY Customer
HAVING SUM(OrderPrice)>1500

 

https://blog.youkuaiyun.com/autofei/article/details/5634359

如何判断mysql中数据表中两个列之间的相同记录和不同记录

两个列的交集,采用union all(组合包含重复值)和group by:

SELECT name

FROM 

 (SELECT firstname as name FROM table1 

 union all 

 SELECT username as name FROM table2) #组合两个表,包含重复值

as alltable

group by name having count(*) > 1;#提取组合表中重复值大于1的name

 

两个列的交集的补集:

SELECT name

FROM (SELECT firstname as name FROM table1 union all SELECT username as name FROM table2) as alltable

group by name having count(*) = 1; #提取组合表中无重复值的name

 

第一个列和第二个列的差集:

SELECT * FROM table1 #找第一个表中不在交集中的部分

WHERE firstname not in 

(SELECT name

FROM (SELECT firstname as name FROM table1 union all SELECT username as name FROM table2) as alltable

group by name having count(*) > 1) #交集

 

类似的可以求第二个列和第一个列的差集。如果一个集合是另一个集合的子集,情况会简单一点。如果希望去除重复的记录,使用union

 

 

SQL快速参考

AND / OR

SELECT column_name(s)
FROM table_name
WHERE condition
AND|OR condition

ALTER TABLE (add column)

ALTER TABLE table_name 
ADD column_name datatype

ALTER TABLE (drop column)

ALTER TABLE table_name 
DROP COLUMN column_name

AS (alias for column)

SELECT column_name AS column_alias
FROM table_name

AS (alias for table)

SELECT column_name
FROM table_name  AS table_alias

BETWEEN

SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2

CREATE DATABASE

CREATE DATABASE database_name

CREATE INDEX

CREATE INDEX index_name
ON table_name (column_name)

CREATE

 TABLE

CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
.......
)

CREATE UNIQUE INDEX

CREATE UNIQUE INDEX index_name
ON table_name (column_name)

CREATE VIEW

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

DELETE FROM

DELETE FROM table_name 
(Note: Deletes the entire table!!)

or

DELETE FROM table_name
WHERE condition

DROP DATABASE

DROP DATABASE database_name

DROP INDEX

DROP INDEX table_name.index_name

DROP TABLE

DROP TABLE table_name

GROUP BY

SELECT column_name1,SUM(column_name2)
FROM table_name
GROUP BY column_name1

HAVING

SELECT column_name1,SUM(column_name2)
FROM table_name
GROUP BY column_name1
HAVING SUM(column_name2) condition value

IN

SELECT column_name(s)
FROM table_name
WHERE column_name
IN (value1,value2,..)

INSERT INTO

INSERT INTO table_name
VALUES (value1, value2,....)

or

INSERT INTO table_name
(column_name1, column_name2,...)
VALUES (value1, value2,....)

LIKE

SELECT column_name(s)
FROM table_name
WHERE column_name
LIKE pattern

ORDER BY

SELECT column_name(s)
FROM table_name
ORDER BY column_name [ASC|DESC]

SELECT

SELECT column_name(s)
FROM table_name

SELECT *

SELECT *
FROM table_name

SELECT DISTINCT

SELECT DISTINCT column_name(s)
FROM table_name

SELECT INTO
(used to create backup copies of tables)

SELECT *
INTO new_table_name
FROM original_table_name

or

SELECT column_name(s)
INTO new_table_name
FROM original_table_name

TRUNCATE TABLE
(deletes only the data inside the table)

TRUNCATE TABLE table_name

UPDATE

UPDATE table_name
SET column_name=new_value
[, column_name=new_value]
WHERE column_name=some_value

WHERE

SELECT column_name(s)
FROM table_name
WHERE condition

 

https://www.jianshu.com/p/bb19b6b0fdc3

SQL Select语句完整的执行顺序:

  1. from子句组装来自不同数据源的数据;
  2. where子句基于指定的条件对记录行进行筛选;
  3. group by子句将数据划分为多个分组;对应select的列不能别名
  4. 使用聚集函数进行计算;
  5. 使用having子句筛选分组;
  6. 计算所有的表达式;
  7. select 的字段;
  8. 使用order by对结果集进行排序。对应Select的列都要别名才能用

 

SQL查询处理的步骤序号(按照写语句的顺序):

(8)SELECT  (9)DISTINCT  (11)<TOP_specification> <select_list>
(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>
(10)ORDER BY <order_by_list>

 

SQL Server 中的四種排序函數比较

Row_Number(): 不可並列,排序序號連續(可支持不排序,只加一個行號,這對分頁查詢很有作用)

Rank(): 可並列,排序序號不連續

Dense_Rank():   可並列,排序序號連續

nTitle(N): 先排序,再將結果分為N組

eg:

  1. select  
  2.     SNO,AGE,SEX,  
  3.     row_number() over(order by age) [row_number],  
  4.     Rank() over(order by age) [Rank],  
  5.     dense_rank() over(order by age) [dense_rank],  
  6.     ntile(5) over(order by age) [ntile]  
  7. from S 

https://blog.youkuaiyun.com/helloword4217/article/details/11715187

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值