博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sql学习内容
阅读量:7248 次
发布时间:2019-06-29

本文共 13598 字,大约阅读时间需要 45 分钟。

基础部分:

SQL分为两个部分:数据操作语言(DML)和数据定义语言(DDL) 数据库管理系统和关系数据库管理系统
查询和更新指令构成了 SQL 的 DML 部分:
SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据

SQL 中最重要的 DDL 语句:

CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
SELECT语法:
select 列名称 From 表名称/ select * from 表名称
实例:SELECT LastName,FirstName FROM Persons
去除重复值:SELECT DISTINCT 列名称 FROM 表名称
实例:SELECT DISTINCT Company From Orders
WHERE子句语法:
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
文本实例:SELECT * FROM Persons WHERE FirstName='Bush'
数值实例:SELECT * FROM Persons WHERE Year>1965
总结:文本的值用'',数值不加单引号
And和Or运算符:
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
组合And和Or运算符:
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William') AND LastName='Carter'

order by语句(ASC为升序,DESC为降序):

SELECT Company, OrderNumber FROM Orders ORDER BY Company
以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
以逆字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
结果:
Company OrderNumber
W3School 2356
W3School 6953
IBM 3532
Apple 4698
insert into语句:
insert into 表名 values (值1,值2,值3)
指定数据插入的列:insert into table_name (列1,列2,列3) values (值1,值2,值3)
实例:
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
update语句:
update 表名 set 列名称 = 新值 where 列名称=某值
实例:
更新某一行中的一个列:UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
更新某一行中的若干列:UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'
DELETE语句:
DELETE from 表名称 where 列名称 = 值
实例:
删除某行:Delete from Person Where lastname = 'Wilson'
删除整个表内容:Delete * from Person
高级部分:
Top:
SQL Server:SELECT TOP number|percent 列名/column_name(s) FROM table_name
MySQL:SELECT 列名 FROM table_name LIMIT number
Oracle:SELECT 列名 FROM table_name WHERE ROWNUM <= number
实例:
选取头两行记录:SELECT TOP 2 * FROM Persons
选取50%的记录:SELECT TOP 50 PERCENT * FROM Persons
Like:
select 列名 from 表名 where 列名 like 表达式('%a%')
实例:
SELECT * FROM Persons WHERE City LIKE '%lon%'
NOT LIKE:SELECT * FROM Persons WHERE City NOT LIKE '%lon%'
通配符:"%"替代一个或多个字符,"_"仅替代一个字符,"[abc]"字符中任意一个单一字符,"[^abc]或[!abc]"不在字符列中的任何单一字符
实例:
SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
SELECT * FROM Persons WHERE City LIKE '[ALN]%'
SELECT * FROM Persons WHERE City LIKE '[!ALN]%'
IN:IN 操作符允许我们在 WHERE 子句中规定多个值
select 列名 from 表名 where 列名 in (value1,value2,...)
实例:
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')
Between:选取介于两个值之间的数据范围
select 列名 from 表名 where 列名 between value1 and value2
实例:
SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
not between:SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'
Alias别名:
给表取别名:select 列名 from 表名 as 别名
给列名取别名:select 列名 as 别名 from 表名
实例:
SELECT LastName AS Family, FirstName AS Name FROM Persons
Join:用于根据两个或多个表中的列之间的关系,从这些表中查询数据
两表查询and:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
inner join:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName
inner join写法:select 列名 from 表1 inner join 表2 on 表1.列名 = 表2.列名
left join写法: select 列名 from 表1 left join 表2 on 表1.列名 = 表2.列名
right join写法: select 列名 from 表1 right join 表2 on 表1.列名 = 表2.列名
UNION:操作符用于合并两个或多个 SELECT 语句的结果集
select 列名 from 表1 UNION select 列名 from 表2
UNION选取不同的值,UNION ALL选取所有值
Create Datebase:
Create Database database_name
实例:
CREATE DATABASE my_db
CREATE TABLE:
Create table 表名称
(
列名称1 数据类型 [约束类型],
列名称2 数据类型 [约束类型],
列名称3 数据类型 [约束类型],
...
)
实例:
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
约束类型:
NOT NULL:不接受NULL值
UNIQUE:唯一约束
为已有的表添加唯一约束: ALTER TABLE Persons ADD UNIQUE (Id_P)
撤销UNIQUE约束:
DROP CONSTRAINT uc_PersonID
PRIMARY KEY:
为已有的表添加PRIMARY KEY:ALTER TABLE Persons ADD PRIMARY KEY (ID_P)
撤销PRIMARY KEY:ALTER TABLE Persons DROP CONSTRAINT pk_PersonID
FOREIGN KEY约束:
CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)
为已有的表添加FOREIGN KEY约束:
ALTER TABLE Orders
ADD FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
撤销FOREIGN KEY:ALTER TABLE Orders DROP CONSTRAINT fk_PerOrders
DROP:
Drop index:Drop index table_name.index_name
Drop table:Drop table table_name
Drop database:Drop database database_name
清楚表数据不删除结构:Truncate table 表名称
Alter:
添加列:Alter table table_name add 列名称 数据类型
删除列: Alter table table_name drop column 列名称
改变列数据类型:Alter table table_name Alter column 列名称 数据类型

View:Create View:

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
实例:
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No
更新视图:
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No
撤销视图:
DROP VIEW view_name
NULL值:判断方法,is null ,is not null
实例:
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NULL
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL
isnull():如果是Null值参加计算为0
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
子查询:在一个查询中,条件是另一个查询,实例
SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
找出没有选修过“李明”老师讲授课程的所有学生姓名
--实现代码:
Select SNAME FROM S Where NOT EXISTS( Select * FROM SC,C Where SC.CNO=C.CNO AND CNAME='李明' AND SC.SNO=S.SNO)
Count:计算客户"Carter"的订单数
SELECT COUNT(Customer) AS CustomerNilsen FROM Orders
WHERE Customer='Carter'
计算总的行数:
SELECT COUNT(*) AS NumberOfOrders FROM Orders
计算不同客户的数目:
SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders
Now():返回当前日期和时间,SELECT ProductName, UnitPrice, Now() as PerDate FROM Products

基础部分:

SQL分为两个部分:数据操作语言(DML)和数据定义语言(DDL) 数据库管理系统和关系数据库管理系统
查询和更新指令构成了 SQL 的 DML 部分:
SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据

SQL 中最重要的 DDL 语句:

CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
SELECT语法:
select 列名称 From 表名称/ select * from 表名称
实例:SELECT LastName,FirstName FROM Persons
去除重复值:SELECT DISTINCT 列名称 FROM 表名称
实例:SELECT DISTINCT Company From Orders
WHERE子句语法:
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
文本实例:SELECT * FROM Persons WHERE FirstName='Bush'
数值实例:SELECT * FROM Persons WHERE Year>1965
总结:文本的值用'',数值不加单引号
And和Or运算符:
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
组合And和Or运算符:
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William') AND LastName='Carter'

order by语句(ASC为升序,DESC为降序):

SELECT Company, OrderNumber FROM Orders ORDER BY Company
以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
以逆字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
结果:
Company OrderNumber
W3School 2356
W3School 6953
IBM 3532
Apple 4698
insert into语句:
insert into 表名 values (值1,值2,值3)
指定数据插入的列:insert into table_name (列1,列2,列3) values (值1,值2,值3)
实例:
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
update语句:
update 表名 set 列名称 = 新值 where 列名称=某值
实例:
更新某一行中的一个列:UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
更新某一行中的若干列:UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'
DELETE语句:
DELETE from 表名称 where 列名称 = 值
实例:
删除某行:Delete from Person Where lastname = 'Wilson'
删除整个表内容:Delete * from Person
高级部分:
Top:
SQL Server:SELECT TOP number|percent 列名/column_name(s) FROM table_name
MySQL:SELECT 列名 FROM table_name LIMIT number
Oracle:SELECT 列名 FROM table_name WHERE ROWNUM <= number
实例:
选取头两行记录:SELECT TOP 2 * FROM Persons
选取50%的记录:SELECT TOP 50 PERCENT * FROM Persons
Like:
select 列名 from 表名 where 列名 like 表达式('%a%')
实例:
SELECT * FROM Persons WHERE City LIKE '%lon%'
NOT LIKE:SELECT * FROM Persons WHERE City NOT LIKE '%lon%'
通配符:"%"替代一个或多个字符,"_"仅替代一个字符,"[abc]"字符中任意一个单一字符,"[^abc]或[!abc]"不在字符列中的任何单一字符
实例:
SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
SELECT * FROM Persons WHERE City LIKE '[ALN]%'
SELECT * FROM Persons WHERE City LIKE '[!ALN]%'
IN:IN 操作符允许我们在 WHERE 子句中规定多个值
select 列名 from 表名 where 列名 in (value1,value2,...)
实例:
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')
Between:选取介于两个值之间的数据范围
select 列名 from 表名 where 列名 between value1 and value2
实例:
SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
not between:SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'
Alias别名:
给表取别名:select 列名 from 表名 as 别名
给列名取别名:select 列名 as 别名 from 表名
实例:
SELECT LastName AS Family, FirstName AS Name FROM Persons
Join:用于根据两个或多个表中的列之间的关系,从这些表中查询数据
两表查询and:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
inner join:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName
inner join写法:select 列名 from 表1 inner join 表2 on 表1.列名 = 表2.列名
left join写法: select 列名 from 表1 left join 表2 on 表1.列名 = 表2.列名
right join写法: select 列名 from 表1 right join 表2 on 表1.列名 = 表2.列名
UNION:操作符用于合并两个或多个 SELECT 语句的结果集
select 列名 from 表1 UNION select 列名 from 表2
UNION选取不同的值,UNION ALL选取所有值
Create Datebase:
Create Database database_name
实例:
CREATE DATABASE my_db
CREATE TABLE:
Create table 表名称
(
列名称1 数据类型 [约束类型],
列名称2 数据类型 [约束类型],
列名称3 数据类型 [约束类型],
...
)
实例:
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
约束类型:
NOT NULL:不接受NULL值
UNIQUE:唯一约束
为已有的表添加唯一约束: ALTER TABLE Persons ADD UNIQUE (Id_P)
撤销UNIQUE约束:
DROP CONSTRAINT uc_PersonID
PRIMARY KEY:
为已有的表添加PRIMARY KEY:ALTER TABLE Persons ADD PRIMARY KEY (ID_P)
撤销PRIMARY KEY:ALTER TABLE Persons DROP CONSTRAINT pk_PersonID
FOREIGN KEY约束:
CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)
为已有的表添加FOREIGN KEY约束:
ALTER TABLE Orders
ADD FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
撤销FOREIGN KEY:ALTER TABLE Orders DROP CONSTRAINT fk_PerOrders
DROP:
Drop index:Drop index table_name.index_name
Drop table:Drop table table_name
Drop database:Drop database database_name
清楚表数据不删除结构:Truncate table 表名称
Alter:
添加列:Alter table table_name add 列名称 数据类型
删除列: Alter table table_name drop column 列名称
改变列数据类型:Alter table table_name Alter column 列名称 数据类型

View:Create View:

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
实例:
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No
更新视图:
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No
撤销视图:
DROP VIEW view_name
NULL值:判断方法,is null ,is not null
实例:
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NULL
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL
isnull():如果是Null值参加计算为0
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
子查询:在一个查询中,条件是另一个查询,实例
SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
找出没有选修过“李明”老师讲授课程的所有学生姓名
--实现代码:
Select SNAME FROM S Where NOT EXISTS( Select * FROM SC,C Where SC.CNO=C.CNO AND CNAME='李明' AND SC.SNO=S.SNO)
Count:计算客户"Carter"的订单数
SELECT COUNT(Customer) AS CustomerNilsen FROM Orders
WHERE Customer='Carter'
计算总的行数:
SELECT COUNT(*) AS NumberOfOrders FROM Orders
计算不同客户的数目:
SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders
Now():返回当前日期和时间,SELECT ProductName, UnitPrice, Now() as PerDate FROM Products
Group by: SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer

 

存储过程:

create procedure usp_GetInfo as select rdName, canLendQty, canLendDay, rdBorrowQty from Reader, ReaderTypewhere Reader.rdType = ReaderType.rdType调用的时候:exec usp_GetInfo

带输入参数的存储过程:

创建一个存储过程,实现还书功能;

1 create procedure usp_ReturnBook 2  3        @rdID char(9), 4  5        @bkID char(9) 6  7 as 8  9        --还书(1.修改书的状态,2.修改读者的借书数量,3.在Borrow表中删除这条借书纪录)10 11        update Book set bkState = 112 13        where bkID = @bkID14 15  16 17        update Reader set rdBorrowQty = rdBorrowQty - 118 19        where rdType = (select rdType from Reader where rdID = @rdID)20 21  22 23        delete from Borrow24 25        where rdID = @rdID and bkID = @bkID26 27 --调用28 29 exec usp_ReturnBook 'rd2017001','bk2017002'

 

 

带输入参数和输出参数的存储过程:

创建一个存储过程,输入读者的编号,输出该读者的姓名;

1 create procedure usp_GetName 2  3     @rdID char(9), 4  5     @rdName varchar(20) output 6  7 as 8  9     select @rdName = rdName from Reader10 11     where rdID = @rdID12 13 go14 15 --调用16 17 declare @rdName varchar(20)18 19 exec usp_GetName 'rd2017001',@rdName output20 21 select @rdName 姓名

创建 DDL 触发器:

禁止用户修改 BooksDB 数据库中的表;、

create trigger tri_OnBookDB on databasefor ddl_table_eventsas    print '无法在数据库BookDB中创建,删除,修改表!!'    rollback--测试:create table Test (a int,b char(6))drop table Borrow
 https://www.cnblogs.com/selene/p/4493311.html
http://www.cnblogs.com/selene/p/4490503.html

转载于:https://www.cnblogs.com/parr2017/p/7944443.html

你可能感兴趣的文章
[译] JavaScript 工作原理:Web Worker 的内部构造以及 5 种你应当使用它的场景
查看>>
Android使用Path仿支付宝支付成功失败动画
查看>>
聊聊rocketmq的DailyRollingFileAppender
查看>>
HTTP/2
查看>>
[单刷APUE系列]第十七章——高级进程间通信
查看>>
分布式之消息队列的特点、选型、及应用场景详解
查看>>
多迪学员问到最多的问题:为什么要学习Python编程语言?
查看>>
从vue中学习defineProperty
查看>>
漂亮的颜色
查看>>
Android Volley 源码解析(二),探究缓存机制
查看>>
Go源码剖析:内置类型
查看>>
102. Binary Tree Level Order Traversal
查看>>
SAP云平台对Kubernetes的支持
查看>>
原来实现GCP用客户端登录这么简单啊
查看>>
PAT A1057 分块思想
查看>>
PAT A1007 动态规划
查看>>
VUE父子组件传递数据
查看>>
前端知识点——图片
查看>>
别人家的程序员是如何使用 Java 进行 Web 抓取的?
查看>>
95%的技术面试必考的JVM知识点都在这,另附加分思路!
查看>>