一、创建数据库表
在序列表中,选择是标识,选择是,标识增量改为1,每次增加1
- 每次增加一列,序列加1
SQL 和T-SQL的区别
2.1SQL(结构化查询语言)
- 关系数据库的标准语言
SQL server、Oracle、DB2
- 非过程化语言
不许要指定对数据的存放方法
- 统一的语言
创建、修改以及删除数据对象(数据库、表等)
2.2T-SQL
SQL的加强版,提供了类似程序语言的基本功能
变量说明、流程控制 、功能函数
- 条件表达式:
3.1 常量:表示单个指定数据值的符号(如字母、数字或符号)
3.2 列名(表中列的名称)
3.3 一元运算符:仅有一个操作数的运算符(+ 表示正数,- 表示负数)
3.4 二元运算符:将两个操作数组合执行操作的运算符(如算数运算符、位运算符、逻辑运算符、比较运算符)
二元运算符:
逻辑运算符
- SQL--语法的介绍
4.1.SQL 语句后面的分号
某些数据库系统要求在每条 SQL 语句的末端使用分号。
分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句。
4.2 一些重要的SQL命令
- SELECT - 从数据库中提取数据
- UPDATE - 更新数据库中的数据
- DELETE - 从数据库中删除数据
- INSERT INTO - 向数据库中插入新数据
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
4.3. 查看Websites表的所有列
SELECT * FROM Websites
4.4从Websites 中选取“name”和age 两个列
SELECT name age FROM Websites
4.5 SELECT DISTINCT返回唯一不同的值
在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
DISTINCT 关键词用于返回唯一不同的值
SELECT DISTINCT country(列名) FROM Websites(表名)
4.6 SQL WHERE 子句(添加条件,过滤指定条件的记录)SELECT column_name,column_name(列名)
FROM table_name(表名)
WHERE column_name operator value(添加列名的条件);
例如:下面的 SQL 语句从 "Websites" 表中选取国家为 "CN" 的所有网站:
SELECT * FROM Websites WHERE country = ‘CN’ ;
注意:如果是数值字段,请不要使用引号。
WHERE 字句中的运算符:
!= 或者<>表示不等于
4.7 SQL AND & OR & NOT 运算符
AND:如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
OR: 如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
4.8 WHERE 条件的运算实例
Where +条件(筛选行)例如:
条件:列,比较运算符,值
比较运算符包涵:= > < >= ,<=, !=,<> 表示(不等于)
Select * from emp where ename='SMITH';
例子中的 SMITH 用单引号引起来,表示是字符串,字符串要区分大小写。
逻辑运算
And:与 同时满足两个条件的值。
Select * from emp where sal > 2000 and sal < 3000;
查询 EMP 表中 SAL 列中大于 2000 小于 3000 的值。
Or:或 满足其中一个条件的值
Select * from emp where sal > 2000 or comm > 500;
查询 emp 表中 SAL 大于 2000 或 COMM 大于500的值。
Not:非 满足不包含该条件的值。
select * from emp where not sal > 1500;
查询EMP表中 sal 小于等于 1500 的值。
逻辑运算的优先级:
() not and or
特殊条件
1.空值判断: is null
Select * from emp where comm is null;
查询 emp 表中 comm 列中的空值。
2.between and (在 之间的值)
Select * from emp where sal between 1500 and 3000;
查询 emp 表中 SAL 列中大于 1500 的小于 3000 的值。
注意:大于等于 1500 且小于等于 3000, 1500 为下限,3000 为上限,下限在前,上限在后,查询的范围包涵有上下限的值。
3.In
Select * from emp where sal in (5000,3000,1500);
查询 EMP 表 SAL 列中等于 5000,3000,1500 的值。
4.like
Like模糊查询
Select * from emp where ename like 'M%';
查询 EMP 表中 Ename 列中有 M 的值,M 为要查询内容中的模糊信息。
注意:
% 表示多个字值,_ 下划线表示一个字符;
M% : 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的。
%M% : 表示查询包含M的所有内容。
%M_ : 表示查询以M在倒数第二位的所有内容。
4.9 SQL ORDER BY 关键字
ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字
SELECT column_name,column_name(列名)
FROM table_name(表名)
ORDER BY column_name,column_name ASC(升序)|DESC(降序);
例如:下面的 SQL 语句从 "Websites" 表中选取所有网站,并按照 "alexa" 列降序排序
SELECT * FROM Websites ORDER BY alexa DESC
ORDER BY 多列:
SELECT * FROM Websites ORDER BY country,alexa;
ORDER BY多列的时候,
(1)、先将country值这一列排序,同为CN的排前面,同属USA的排后面;
(2)、然后在同属CN的这些多行数据中,再根据alexa值的大小排列。
(3)、ORDER BY 排列时,不写明ASC DESC的时候,默认是ASC
4.10 SQL INSERT INTO 语句
(1)INSERT INTO 语句用于向表中插入新记录。
(2)NSERT INTO 语句可以有两种编写形式:
(一) 第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name VALUES (value1,value2,value3,...);这种不常用
(二)第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
假设我们要向 "Websites" 表中插入一个新行。
4.11 SQL UPDATE 语句
(1)UPDATE 语句用于更新表中已存在的记录。
(2)SQL UPDATE 语法:
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
注意:WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!
例如:UPDATE Websites SET alexa='5000', country='USA' WHERE name='菜鸟教程';(更新名字等于菜鸟教程的 alexa和country数据)
4.12 SQL DELETE 语句
(1)DELETE 语句用于删除表中的行。
(2 )SQL DELETE 语法:
DELETE FROM table_name
WHERE some_column=some_value;
注意:WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!
例如:假设我们要从 "Websites" 表中删除网站名为 "百度" 且国家为 CN 的网站 。
DELETE FROM Websites WHERE name='百度' AND country='CN';
- 删除表所有数据(注意这步操作后不可恢复)
- DELETE FROM table_name;或DELETE * FROM table_name;
4.13 SQL SELECT TOP 字句
(1)SELECT TOP 子句用于规定要返回的记录的数目。
(2)SQL Server 语法:
SELECT TOP number|percent(百分数) column_name(s)
FROM table_name;
例如:(1)从 websites 表中选取前面百分之 50 的记录:
SELECT TOP 50 PERCENT * FROM Websites;
(2)返回 1 行记录的数目
select top 1 * from 学生信息
4.14 SQL LIKE 操作符
(1)LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
(2)SQL LIKE 语法:
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
例如:下面的 SQL 语句选取 name 以字母 "G" 开始的所有客户:
SELECT * FROM Websites
WHERE name LIKE 'G%';
4.15 SQL 通配符
(1)通配符可用于替代字符串中的任何其他字符。在 SQL 中,通配符与 SQL LIKE 操作符一起使用。
4.16 SQL IN 操作符
(1)IN 操作符允许您在 WHERE 子句中规定多个值。
(2)SQL IN 语法:
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
例如:查询 EMP 表 SAL 列中等于 5000,3000,1500 的值。
Select * from emp where sal in (5000,3000,1500)
4.17 SQL BETWEEN 操作符
(1)BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
(2)SQL BETWEEN 语法:
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
例子:查询 emp 表中 SAL 列中大于 1500 的小于 3000 的值。
Select * from emp where sal between 1500 and 3000;
4.18 SQL 别名
(1)通过使用 SQL,可以为表名称或列名称指定别名。基本上,创建别名是为了让列名称的可读性更强。
(2)列的 SQL 别名语法:
SELECT column_name AS alias_name
FROM table_name;
- 表的 SQL 别名语法:
SELECT column_name(s)
FROM table_name AS alias_name;
提示:如果列名称包含空格,要求使用双引号或方括号:
4.19 创建数据库
CREATE DATABASE dbname(数据库名);
4.20创建数据库表
语法:CREATE TABLE table_name(表名)
(
column_name1(列名) data_type(size)(列的类型),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
create TABLE new
(ID int IDENTITY(1,1),创建标识符,类型int,(起始为1,自增长1)
name nvarchar(50) not null,name,类型nvarchar,不为空
age int not null check(age>=0 and age <=120),check约束
)
4.21 SQL GROUP BY 语句
(1)GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
(2)SQL GROUP BY 语法:
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
例如:SELECT
SUM (分数) 总分,AVG(分数)平均分,MAX(分数)最高分,MIN(分数)最低分,
课程编号
FROM
成绩信息
GROUP BY
课程编号
HAVING
AVG(分数)<80
ORDER BY
课程编号 DESC
以下SQL语句列出了每个国家/地区的客户数量:
SELECT COUNT(CustomerID), CountryFROM CustomersGROUP BY Country;
4.22触发器:
insert触发器:向表中插入数据时被触发;
delete触发器:从表中删除数据时被触发;
update触发器:修改表中数据时被触发。
语法:
CREATE TRIGGER trigger_name
ON table_name
[WITH ENCRYPTION]
FOR | AFTER | INSTEAD OF [DELETE, INSERT, UPDATE]
AS
T-SQL语句
GO
1、 After触发器
After触发器要求只有执行某一操作insert、update、delete之后触发器才被触发,且只能定义在表上。
2、Instead of 触发器
Instead of 触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身。既可以在表上定义instead of触发器,也可以在视图上定义
创建删除表的触发器
CREATE TRIGGER NO_DELETE
ON new
FOR DELETE[insert,update]
AS
PRINT('滚,不允许删表')
ROLLBACK
GO
4.23 SQL SUM() 函数
(1) SUM() 函数返回数值列的总数。
(2)下面的 SQL 语句查找 "access_log" 表的 "count" 字段的总数:
实例
SELECT SUM(count) AS nums(把count的和输入到nums) FROM access_log;
4.24 SQL AVG() 函数
(1)AVG() 函数返回数值列的平均值。
下面的 SQL 语句从 "access_log" 表的 "count" 列获取平均值:
实例
SELECT AVG(count) AS CountAverage FROM access_log;
4.25 SQL COUNT() 函数
(1)SQL COUNT(*) 语法
COUNT(*) 函数返回表中的记录数:
SELECT COUNT(*) FROM table_name;
SQL COUNT(DISTINCT column_name) 语法
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
SELECT COUNT(DISTINCT column_name) FROM table_name;
注释:COUNT(DISTINCT) 适用于 ORACLE 和 Microsoft SQL Server,但是无法用于 Microsoft Access。
(2)下面的 SQL 语句计算 "access_log" 表中总记录数:
实例
SELECT COUNT(*) AS nums FROM access_log;
4.26 SQL HAVING 子句
(1)在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。
- SQL having 语法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;
(3)查找课程标号中总分,平均分,最高分,最低分,其中平均分小于80,降序排列的
SELECT
SUM (分数) 总分,AVG(分数)平均分,MAX(分数)最高分,MIN(分数)最低分,
课程编号
FROM
成绩信息
GROUP BY
课程编号
HAVING
AVG(分数)<80
ORDER BY
课程编号 DESC