用户登录
用户注册

分享至

SQL语句汇总

  • 作者: 达?矢抾哆拉?
  • 来源: 51数据库
  • 2021-07-28

数据库

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

?

?

软件
前端设计
程序设计
Java相关