数据库
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 only;definition 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