最近看了一本SQL
SERVER2010的教材,顺便记录了一下笔记(PS:此书暂时没有看完、所以暂时更新一下内容)!一下内容为本人自己整理、如有错误还请大家指出以免影响别人的学习。

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

SELECT DISTINCT 语句:DISTINCT 关键词用于返回唯一不同的值。

— 创建数据
CREATE DATABASE day2;
— 使用数据库
USE day2;
— 创建一个表格
CREATE TABLE stu(
id INT,
NAME VARCHAR(20),
sex VARCHAR(2),
age INT ,
address VARCHAR(30)
);

 

SQL 中最重要的 DDL 语句:
CREATE DATABASE – 创建新数据库
ALTER DATABASE – 修改数据库
CREATE TABLE – 创建新表
ALTER TABLE – 变更(改变)数据库表
DROP TABLE – 删除表
CREATE INDEX – 创建索引(搜索键)
DROP INDEX – 删除索引

SELECT DISTINCT column_name,column_name FROM table_name;

— 查看表格的结构
DESC stu;
— 添加列
ALTER TABLE stu ADD java INT;
ALTER TABLE stu ADD jsp INT

1、 创建一个表TestDB

SELECT语法:
select 列名称 From 表名称/ select * from 表名称
实例:SELECT LastName,FirstName FROM Persons
去除重复值:SELECT DISTINCT 列名称 FROM 表名称
实例:SELECT DISTINCT Company From Orders

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

INSERT INTO stu (id,NAME,sex,age,address,java,jsp)
VALUES(1,’小明’,’男’,25,’山东2′,78,99);
INSERT INTO stu (id,NAME,sex,age,address,java,jsp)
VALUES(2,’小黄’,’男’,23,’河南’,65,55);
INSERT INTO stu (id,NAME,sex,age,address,java,jsp)
VALUES(2,’小黄’,’女’,23,’太远’,65,55);
INSERT INTO stu (id,NAME,sex,age,address,java,jsp)
VALUES(4,’小黄’,’女’,23,’太远’,45,85);
INSERT INTO stu (id,NAME,sex,age,address,java,jsp)
VALUES(NULL,NULL,”,23,’太远’,45,85);

  DROP TABLE TestDB

WHERE子句语法:
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
文本实例:SELECT * FROM Persons WHERE FirstName=’Bush’
数值实例:SELECT * FROM Persons WHERE Year>1965
总结:文本的值用”,数值不加单引号

SELECT * FROM Persons WHERE City=’Beijing’

DELETE FROM stu;
— 1 查询所有的类
SELECT * FROM stu;

  CREATE TABLE TestDB(

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’

AND 运算符实例:下面的 SQL 语句从 “Websites” 表中选取国家为 “CN”
alexa排名大于 “50” 的所有网站:

— 2. 查询指定的列
SELECT id,NAME,sex FROM stu;

    id varchar(15) NOT NULL,

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

SELECT * FROM Websites WHERE country =’CN’ AND alexa>50;

— 3.查询的时候增常量列
SELECT id,NAME,sex,address, ‘java2版’ FROM stu;
— 4.查询的时候起一个别名
SELECT id AS ‘编号’ ,NAME AS’姓名’,sex AS ‘姓别’,’java1版’ AS ‘班级’
FROM stu;

    name varchar(15) NOT NULL,

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

OR运算符实例:下面的 SQL 语句从 “Websites” 表中选取国家为 “USA”
或者 “CN” 的所有客户:

— 5.查询的时候进行合并指定的列
— 需求 : 在查询每个学生的java和jsp总成绩

    sex int NOT NULL,

高级部分:
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

SELECT * FROM Websites WHERE country=’USA’ OR country=’CN’

SELECT id,NAME,sex,age,address, (java+jsp) AS ‘总成绩’ FROM stu;
— 在合并的时候 合并的只能进行数字类型
SELECT id ,NAME,sex ,(address+sex) AS ‘总’ FROM stu;
— 6 查询时去除重复的记录

    CONSTRAINT pk_id PRIMARY KEY(id)

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 列名称 数据类型

AND & OR运算符结合:可以把 AND 和 OR
结合起来(使用圆括号来组成复杂的表达式)。

— 查询学生的性别 男 女
SELECT DISTINCT sex FROM stu;

  );

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

下面的 SQL 语句从 “Websites” 表中选取 alexa 排名大于 “15” 且国家为 “CN”
或 “USA” 的所有网站:

— 7 条件查询 where
— 逻辑条件 and(与 和) or(或者)
— 需求 查询 id为1 或者性别为女
SELECT id,NAME,sex,age,address,java,jsp FROM stu WHERE id=1 OR
sex=’女’;

2、 向TestDB表中插入一条数据

SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL

SELECT * FROM Websites WHERE alexa>15 AND (count=’CN’ OR
count=’USA’);

— 需求 查询 id 为 1 并且性别为男 信息
SELECT id,NAME,sex,address,java,age FROM stu WHERE id=1 AND sex=’男’;
— 比较条件 > < >= <= =(等于) <>(不等于) between
…and… 等价于 》= and <=)

  INSERT INTO TestDB (id,name,sex) VALUES (‘001′,’Clown’,1);

isnull():如果是Null值参加计算为0
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
子查询:在一个查询中,条件是另一个查询,实例
SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)

ORDER BY
关键字:
用于对结果集按照一个列或者多个列进行排序。默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用
DESC 关键字。

— 查询所有的java成绩大于65的是、学生信息

3、 查询TestDB中全部数据

找出没有选修过“李明”老师讲授课程的所有学生姓名
–实现代码:
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 语句从 “Websites” 表中选取所有网站,并按照 “alexa”
列排序:ORDER BY 实例

SELECT * FROM stu WHERE java>=65;
— 查询java成绩大于等于65 并且小于等于75

  SELECT * FROM TestDB;

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

SELECT * FROM Websites ORDER BY alexa;

SELECT * FROM stu WHERE java>=65 AND java<=75;
— 另外一种写法
SELECT * FROM stu WHERE java BETWEEN 65 AND 75
— 查询java不等于65
SELECT *FROM stu WHERE java<>65;

4、 给查询的列名起个自定义的别名

SQL 中最重要的 DDL 语句:
CREATE DATABASE – 创建新数据库
ALTER DATABASE – 修改数据库
CREATE TABLE – 创建新表
ALTER TABLE – 变更(改变)数据库表
DROP TABLE – 删除表
CREATE INDEX – 创建索引(搜索键)
DROP INDEX – 删除索引

从 “Websites” 表中选取所有网站,并按照 “alexa” 列降序排序:ORDER BY
DESC 实例

— 判空查询 is null not null =”“ 《》”“

  SELECT id AS c1,name AS c2,sex AS c3 FROM TestDB;

SELECT语法:
select 列名称 From 表名称/ select * from 表名称
实例:SELECT LastName,FirstName FROM Persons
去除重复值:SELECT DISTINCT 列名称 FROM 表名称
实例:SELECT DISTINCT Company From Orders

SELECT * FROM Websites ORDER BY alexa DESC;

— 需求: 查询姓名为空信息 (空 包括null =””)
SELECT * FROM stu WHERE NAME IS NULL OR NAME=”;
— 求出性别不为空字符的
SELECT * FROM stu WHERE sex <>” OR NOT NULL;

  也可以不加[AS]

WHERE子句语法:
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
文本实例:SELECT * FROM Persons WHERE FirstName=’Bush’
数值实例:SELECT * FROM Persons WHERE Year>1965
总结:文本的值用”,数值不加单引号

INSERT INTO :语句用于向表中插入新记录。INSERT INTO
语句可以有两种编写形式。

— 模糊查询

  SELECT id c1,name c2,sex c3 FROM TestDB;

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’

第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:

— like
— % 匹配任意字符
— _匹配一个字符

  也可以对别名加[“”],则可以使用关键字做别名

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 table_name

VALUES (value1,value2,value3,…);

— 查询姓名为 ‘小’学生信息
SELECT * FROM stu WHERE NAME LIKE ‘小%’;
— 查询姓名为’小 ‘且小的后面只有一个字符

  SELECT id “AS”,name “SUM”,sex “CHAR” FROM TestDB;

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

第二种形式需要指定列名及被插入的值:

SELECT * FROM stu WHERE NAME LIKE ‘小_’;
— 8 聚合查询 (使用聚合函数的查询)
— 常用的函数 sum() avg() max() min() count()

5、 使用DISTINCT消除重复的行(计算量大、一般情况不建议使用)

高级部分:
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

INSERT INTO table_name(column1,column2,column3,…)

VALUES (value1,value2,value3,…);

— 求出java的成绩
SELECT SUM(java) AS ‘java总成绩’ FROM stu;

    SELECT DISTINCT name,sex FROM TestDB;

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 列名称 数据类型

假设我们要向 “Websites” 表中插入一个新行。

— 求出java的平均分
SELECT AVG(java) AS’平均分’ FROM stu;

6、 ORDERY BY进行升序排列

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

INSERT INTO Websites(name,url,alexa,country)

VALUES(‘百度’,”);

— 求出最高分
SELECT MAX(java) AS ‘最高分’ FROM stu;
— 统计出一共有多少条记录 cont(字段) 不包括null元素
SELECT COUNT(*) FROM stu;

    SELECT * FROM TestDB ORDER BY sex

SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL

UP DATE语句:UPDATE 语句用于更新表中的记录。

— 9 分页查询 limit

7、 ORDERY BY CASE按照条件排序

isnull():如果是Null值参加计算为0
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
子查询:在一个查询中,条件是另一个查询,实例
SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)

假设我们要把 “简书” 的 alexa 排名更新为 5000,country 改为 USA。

— 起始行 从0开始进行数
— 每页显示多少条记录 (当前页-1)*每页显示的记录数

    SELECT id c1,name c2,sex c3

找出没有选修过“李明”老师讲授课程的所有学生姓名
–实现代码:
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

UPDATE Websites SET alexa=5000,country=’USA’ WHERE name=’简书’

— 查询1.2 条记录 一页显示两条记录
— 查询的是第一页数据
SELECT * FROM stu LIMIT 0,2

    FROM TestDB

 

请注意 SQL UPDATE 语句中的 WHERE 子句!WHERE
子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE
子句,所有的记录都将被更新!

— 查询第二页

    ORDER BY CASE — ORDER BY为一个隐式游标(CURSOR)

存储过程:

DELETE语句:DELETE 语句用于删除表中的记录。

SELECT * FROM stu LIMIT 2,2

    WHEN name=’Clown’ — 如果[name]列的值全部为[Clown]

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

假设我们要从 “Websites” 表中删除网站名为 “百度” 且国家为 CN 的网站 。

— 查询第三页
SELECT * FROM stu LIMIT 4,2;
— 查询第四页
SELECT * FROM stu LIMIT 6,2

    THEN sex   — 则按照[sex]排序

带输入参数的存储过程:

DELETE FROM Websites WHEREname=’百度’ANDcountry=’CN’;

— 10 排序查询
— order by
— asc 正序 升序
— desc 倒序
— 默认的情况下时按照数据插入的顺序来进行查询的

    ELSE id — 否则按照[id]排序

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

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

— 需求 java成绩按照从低到高进行查询

    END;

图片 1

下面的 SQL 语句从 “Websites” 表中选取头两条记录

SELECT * FROM stu ORDER BY java ASC;
— 需求 jsp的成绩重高到低进行排序

8、 ORDERY BY [column] DESC降序排列

 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 = 1
12 
13        where bkID = @bkID
14 
15  
16 
17        update Reader set rdBorrowQty = rdBorrowQty - 1
18 
19        where rdType = (select rdType from Reader where rdID = @rdID)
20 
21  
22 
23        delete from Borrow
24 
25        where rdID = @rdID and bkID = @bkID
26 
27 --调用
28 
29 exec usp_ReturnBook 'rd2017001','bk2017002'

SELECT * FROM Websites LIMIT 2;

SELECT * FROM stu ORDER BY jsp DESC;

    SELECT * FROM TestDB ORDER BY id DESC;

图片 2

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

— 多种排序方式进行查询
— jaba 按照正序进行 jsp按照反序

9、 WHERE进行数据筛选

 

下面的 SQL 语句选取 name 以字母 “G” 开始的所有客户:

SELECT * FROM stu ORDER BY java ASC ,jsp DESC;

    — 筛选出[id]为[001]的所有行的所有列

 

SELECT * FROM Websites

WHERE name LIKE ‘G%’;

— 11 分组查询
— group by
— 查询男女”“ 的人数
— 男 2

    SELECT * FROM TestDB WHERE id=’001′;

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

下面的 SQL 语句选取 name 以字母 “k” 结尾的所有客户:

— 女 2
— ”“ 2
SELECT sex,COUNT(*) FROM stu GROUP BY sex;
— 12 分组之后 进行刷选

    注:不能在WHERE中使用SUM()或者COUNT()等聚合函数!

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

SELECT * FROM Websites

WHERE name LIKE ‘%k’;

— 查询总人数大于3个的性别 分组之后 不能使where 使用having
SELECT sex ,COUNT(*) FROM stu GROUP BY sex HAVING COUNT(*)>=3;

   
比较运算符最快的为相等[=]其次是不相等[<、<=、>、>=]最慢的为不等于[<>或!=]

图片 3

下面的 SQL 语句选取 name 包含模式 “oo” 的所有客户:

SELECT * FROM stu;

    表中选择特定行的操作称为[限制]

 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 Reader
10 
11     where rdID = @rdID
12 
13 go
14 
15 --调用
16 
17 declare @rdName varchar(20)
18 
19 exec usp_GetName 'rd2017001',@rdName output
20 
21 select @rdName 姓名

SELECT * FROM Websites

WHERE name LIKE ‘%oo%’;

— 数据的约束
— 默认值 当用户使用默认值的字段不插入数据的时候 就是用默认值
— 对默认值字段插入数据的时候 null是可以插入

    WHERE语句不能用[列名]的[别名]、必须用原列名

图片 4

通过使用 NOT 关键字,您可以选取不匹配模式的记录。

CREATE TABLE emp(
id INT,
NAME VARCHAR(20),
address VARCHAR(10) DEFAULT ‘河南省周口市’
)

    WHERE在SELECT之前进行计算

创建 DDL 触发器:

下面的 SQL 语句选取 name 不包含模式 “oo” 的所有客户:

INSERT INTO emp VALUES(1,’小明’,”);
SELECT * FROM emp;
DROP TABLE emp;

10、多条件查询连接符:AND 、OR 、NOT

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

SELECT * FROM Websites

WHERE name NOT LIKE ‘%oo%’;

— 非空 空 ‘’
— 限制字段必须要有值 字段必须要有数据 不能查入null值

  AND:查询多个条件同时为[真]

图片 5

SQL通配符:通配符可用于替代字符串中的任何其他字符。在 SQL
中,通配符与 SQL LIKE 操作符一起使用。SQL 通配符用于搜索表中的数据。

CREATE TABLE student(
id INT NOT NULL,
NAME VARCHAR(20)
);
INSERT INTO student VALUES (”,’小黄’);
SELECT * FROM student;
DROP TABLE student;

  OR:一个条件成立即可以

create trigger tri_OnBookDB on database

for ddl_table_events

as

    print '无法在数据库BookDB中创建,删除,修改表!!'

    rollback

--测试:

create table Test (a int,b char(6))

drop table Borrow

下面的 SQL 语句选取 name 以一个任意字符开始,然后是 “oogle”
的所有客户:

— 唯一
— 唯一可以插入null元素 可以插入null元素
CREATE TABLE stu1(
id INT UNIQUE,– 唯一
NAME VARCHAR(20));
INSERT INTO stu1 VALUES(1,’zhangsan’);
INSERT INTO stu1 VALUES(NULL ,’lis’);
SELECT * FROM stu1;
DROP TABLE stu1;

  NOT:取与条件相反的结果

图片 6以上部分内容转自:

SELECT * FROM Websites

WHERE name LIKE ‘_oogle’;

— 主键
— 非空+唯一性
— 通常情况下 每一张表都会设置一个字段 为主键
用来表示表的每条记录都唯一的
CREATE TABLE stu2(
id INT PRIMARY KEY,– 主键
NAME VARCHAR(20));

  – 筛选出[id]为[001]的所有行的所有列

 

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

INSERT INTO stu2 VALUES (1,’wangwu’);– 违反了字段的唯一性Duplicate
entry ‘1’ for key ‘PRIMARY’
SELECT * FROM stu2;
INSERT INTO stu2 VALUES(NULL,’lisi’);– 违反了字段的非空约束 Column ‘id’
cannot be null

  SELECT * FROM TestDB WHERE NOT id<>’001′;

下面的 SQL 语句选取 name 为 “Google” 或 “baidu” 的所有网站:

— 自增长
— 字段不用进行赋值 可以自动的增加 每次增加1

  注:同时使用是AND、OR、NOT优先级:NOT最高其次是AND最后为OR

SELECT * FROM Websites

WHERE name IN(’Google’,’baidu’);

CREATE TABLE stu3(
id INT PRIMARY KEY AUTO_INCREMENT, — 自增长 从0开始
NAME VARCHAR(10)
)

11、LIKE模糊查询

BETWEEN操作符:BETWEEN
操作符用于选取介于两个值之间的数据范围内的值。

DROP TABLE stu3;

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注