SQL语句汇总

数据库

SQL

1.create

(1)创建数据库

create database dbname

(2)创建数据库表

create table tableName(col1 type1[not null][primary key], col2 type2[not null]

(3)根据已有的表创建新表

create table tab_new like tab_old(使用旧表创建新表)

create table tab_new as select col1,col2……from tab_old definition onlydefinition only指创建表的时候不同时进行数据插入。关键字就是指“只定义无数据”

2.drop

(1)删除数据库

drop database dbname

(2)删除数据库表

drop table tableName

3.select

(1)SELECT 列名称 FROM 表名称 

select LastName from Persons

select LastName,FirstName from Persons

(2)SELECT * FROM 表名称

select * from Persons

(3)SELECT DISTINCT 列名称 FROM 表名称:返回值去重查询(DISTINCT)

        select DISTINCT LastName from Persons

4.where

有条件滴从表中查询数据。

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

运算符:

操作符

描述

=

等于

<>

不等于

>

大于

<

小于

>=

大于等于

<=

小于等于

BETWEEN

在某个范围内

LIKE

搜索某种模式

        select * from Persons where City=’Beijing’

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。

        select * from Persons where FirstName=’Bush’

        select * from Persons where Year>1965

5.and & or

where子语句中把多个条件结合起来过滤查询。

select * from Persons where FirstName=’gao’ and LastName=’ xiang’

select * from Persons where FirstName=’gao’ and LastName=’xiang’

结合and & or运算符(使用圆括号来组成复杂的表达式)

select * from Persons where FirstName=’gao’ and (LastName=’xiang’ or LastName=’yang’)

6.order by

根据指定列对结果集进行排序(默认按照升序对记录进行排序)(降序:DESC升序:ASC

(1)以字母顺序显示公司名称Company

select Company,OrderNumber from Orders order by Company

(2)以字母顺序显示公司名称Company,并且以数字顺序显示OrderNumber

(优先Company顺序,Company值相同的情况下,按照OrderNumber顺序)

select Company,OrderNumber from Orders order by Company,OrderNumber

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

(优先Company逆序,Company值相同的情况下,按照OrderNumber顺序)

select Company,OrderNumber from Orders order by Company DESC,OrderNumber ASC

7.insert

(1)插入行

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

insert into Persons values(‘gao’,’xiang’,’Beijing’)

(2)指定所要插入的列

INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,….)

insert into Persons(FirstName,LastName)values(‘gao’,’xiang’)

8.update

修改数据

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

update Persons set FirstName=’Fred’ where LastName=’Wilson

update Persons set FirstName=’Fred’,Address=’nanjing’ where LastName=’Wilson’

9.delete

删除数据(行)

DELETE FROM 表名称 WHERE 列名称=值

delete from Persons where LastName=’Wilson’

删除所有行

delete from Persons / delete * from Persons

SQL高级

1.top

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

返回规定数目的数据

SELECT TOP number|percent column_name(s) FROM table_name

从 “Persons” 表中选取 50% 的记录

select top 50 percent * from Persons

MySQL 和 Oracle 中的 SQL SELECT TOP 是等价的

MySQL

SELECT column_name(s) FROM table_name LIMIT number

select * from Persons limit 5

Oracle

SELECT column_name(s) FROM table_name WHERE ROWNUM <= number

select * from Persons where rownum<=5

2.like

用于在where子句中搜索列中的指定模式

SELECT colum_name(s) FROM table_name WHERE colum_name LIKE pattern

(1)从 “Persons” 表中选取居住在以 “N” 开始的城市里的人

select * from Persons where City like ‘N%’

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

(2)从 “Persons” 表中选取居住在以 “g” 结尾的城市里的人

select * from Persons where City like ‘%g’

(3)从 “Persons” 表中选取居住在包含 “lon” 的城市里的人

select * from Persons where City like ‘%lon%’

(4)通过使用 NOT 关键字,从 “Persons” 表中选取居住在不包含 “lon” 的城市里的人

select * from Persons where City NOT like ‘%lon%’

3.通配符

再搜索数据库中的数据时,SQL通配符可以替代一个或者多个字符。

SQL通配符必须与LIKE运算符一起使用。

通配符

描述

%

替代一个或多个字符

_

仅替代一个字符

[charlist]

字符列中的任何单一字符

[^charlist]

或者

[!charlist]

不在字符列中的任何单一字符

(1)使用 % 通配符

从 “Persons” 表中选取居住在以 “Ne” 开始的城市里的人:

select * from Persons where City like ‘Ne%’

从 “Persons” 表中选取居住在包含 “lond” 的城市里的人:

select * from Persons where City like ‘%lond%’

(2)使用 _ 通配符

从 “Persons” 表中选取名字的第一个字符之后是 “eorge” 的人:

select * from Persons where FirstName like ‘_eorge’

从 “Persons” 表中选取的这条记录的姓氏以 “C” 开头,然后是一个任意字符,然后是 “r”,然后是任意字符,然后是 “er”:

select * from Persons where LastName like ‘C_r%er’

(3)使用 [charlist] 通配符

从 “Persons” 表中选取居住的城市以 “A” 或 “L” 或 “N” 开头的人:

select * from Persons where City like ‘[ALN]%’

从 “Persons” 表中选取居住的城市不以 “A” 或 “L” 或 “N” 开头的人:

select * from Persons where City like ‘[!ALN%]’

4.in

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

SELETE column_name(s) FROM table_name WHERE column_name IN(value1,value2,……)

从”Persons”表中选取姓氏为 Adams 和 Carter 的人

select * from Persons where LastName in(‘Adams’,’Carter’)

5.between

BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。BETWEEN … AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

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

以字母顺序显示介于 “Adams”(包括)和 “Carter”(不包括)之间的人

select * from Persons where LastName between ‘Adams’ and ‘Carter’

以字母顺序显示 “Adams”(包括)和 “Carter”(不包括)之外的人

select * from Persons where LastName NOT between ‘Adams’ and ‘Carter’

6.Alias

可以为列名称和表名称指定别名(Alias)。

SELETE column_name(s) FROM table_name AS alias_name

SELETE column_name(s) AS alias_name FROM table_name

(1)使用表名称别名

假设我们有两个表分别是:”Persons” 和 “Product_Orders”。我们分别为它们指定别名 “p” 和 “po”。

现在,我们希望列出 “John Adams” 的所有定单。

select po.OrderID,p.LastName,p.FirstName from Persons AS p,Product_Orders AS po where p.LastName=’Adams’ AND p.FirstName=’John’

(2)使用列名别名

select LastName AS Family,FirstName AS Name from Persons.

结果:

Family

Name

Adams

John

Bush

George

Carter

Thomas

7.join

用于根据两个或者多个表中列之间的关联关系,从多个表中查询数据。

Join和Key

有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。

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

Persons表中的唯一键Id_P作为关联字段存储在以Id_O为唯一键的表Orders中,作为关联。

(1)查询谁购买了什么产品

select Persons.LastName,Persons.FirstName,Orders.OrderNo from Persons,Orders where Persons.Id_P=Orders.Id_P

(2)Join从两个表中关联查询

select Persons.LastName,Persons.FirstName,Orders.OrderNo from Persons inner JOIN Orders on Persons.Id_P=Orders.Id_P order by Persons.LastName.

(3)JOIN:如果表中有至少一个匹配,则返回行

(4)LEFT JOIN:即使右表中没有匹配,也从左表返回所有行

(5)Right JOIN:即使左表中没有匹配,也从右表返回所有行

(6)FULL JOIN:只要其中一个表中存在匹配,就反回行。

8.inner join : inner join = join

表中存在至少一个匹配时,inner join返回行

SELECT column_name(s) From tableName1 inner join tableName2 ON tableName1.column_name=tableName2.column_name.

select Persons.LastName,Persons.FirstName,Orders.OrderNo from Persons inner join Orders ON Persons.Id_P=Orders.Id_P order by Persons.LastName

9.left join

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

SELECT column_name(s)

FROM table_name1

LEFT JOIN table_name2

ON table_name1.column_name=table_name2.column_name

select Persons.LastName,Persons.FirstName,Orders.OrderNo from Persons Left join Orders ON Persons.Id_P=Orders.Id_P order by Persons.LastName

结果集:

LastName

FirstName

OrderNo

Adams

John

22456

Adams

John

24562

Carter

Thomas

77895

Carter

Thomas

44678

Bush

George

 

LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。

10.right join

RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

SELETE column_name(s) FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name

我们希望列出所有的定单,以及定购它们的人 – 如果有的话。

select Persons.LastName,Persons.FirstName,Orders.OrderNo from Persons right join Orders ON Persons.Id_P=Orders.Id_P order by Persons.LastName.

结果集:

LastName

FirstName

OrderNo

Adams

John

22456

Adams

John

24562

Carter

Thomas

77895

Carter

Thomas

44678

 

 

34764

RIGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行。

11.full join

只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。

SELETE column_name(s) from table_name1 full join table_name2 ON table_name1.culumn_name=table_name2.column_name

select Persons.LastName,Persons.FirstName,Orders.OrderNo from Persons full join Orders Persons.Id_P=Orders.Id_P

结果集:

LastName

FirstName

OrderNo

Adams

John

22456

Adams

John

24562

Carter

Thomas

77895

Carter

Thomas

44678

Bush

George

 

 

 

34764

FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 “Persons” 中的行在表 “Orders” 中没有匹配,或者如果 “Orders” 中的行在表 “Persons” 中没有匹配,这些行同样会列出。

12.UNION、UNION ALL

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

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

SQL UNION 语法:

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

 

 

 

3.备份sql server

—— 创建备份数据的device

use master

EXEC sp_adddumpdevice ‘disk’,’testBack’ , ‘c:\mssql7backup\MyNwind_1.dat’

—— 开始备份

BACKUP DATABASE pubs TO testBack

 

 

本文地址:https://blog.csdn.net/qingjuyashi/article/details/107139088

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐