SQL学习笔记

一、SQL概述

SQL按其功能可以分为三大部分:
数据定义功能、数据操纵功能和数据控制功能
DDL、DML、DCL

SQL功能 命令动词
数据定义 CREATE、ALTER、DROP
数据操纵 SELECT、INSERT、UPDATE、DELETE
数据控制 GRANT、REVOKE

二、SQL数据定义

在SQL Server中,我们点击“新建查询”,在弹出的窗口中键入sql语言

1、创建数据库

基本格式:

样例:

CREATE DATABASE Demo
ON
(NAME=Demo_data,--主文件名称
FILENAME='D:\Test\Demo_data.mdf',--主文件的绝对路径
SIZE=1,--主文件的大小
MAXSIZE=10,--最大值
FILEGROWTH=1--数值型增长方式
--FILEGROWTH=10%--百分比增长
)
LOG ON
(NAME=Demo_log,--日志文件名称
FILENAME='D:\Test\Demo_log.ldf',--日志文件的绝对路径
SIZE=1,--日志文件的大小
MAXSIZE=10,--最大值
FILEGROWTH=1--数值型增长方式
)

效果:

2、修改数据库

修改数据库名:

ALTER DATABASE Demo
MODIFY NAME=New_Demo


修改文件名:

ALTER DATABASE New_Demo MODIFY FILE(NAME=Demo_data,NEWNAME=Demo)

添加新文件:

ALTER DATABASE New_Demo
ADD FILE
(NAME = Demo_ndf,
FILENAME = 'D:\Test\Demo_ndf.ndf',
SIZE = 5MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB
)


添加日志文件

ALTER DATABASE New_Demo
ADD LOG FILE
(NAME = Demo_new_log,
FILENAME = 'D:\Test\Demo_new_log.ldf',
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB
)

3、删除数据库

DROP DATABASE 数据库1[,数据库2,数据库3]--可以同时删除多个数据库
--但是用sql语句删除数据库的时候不会有确认信息,所以请小心使用

4、创建基本表

定义基本表的一般格式:

warning
在SQL Server 建立新建查询的时候注意手动选择数据库

样例:

根据上图所示内容,我们可以创建一个Student表:

CREATE TABLE Student
(
Sno char(7),
Sname char(10),
Ssex char(2),
Sage tinyint,
Sdept char(20)
)


在上面的例子中,我们创建表格的时候没有确立约束条件。
一个表的约束条件分为两类:列级约束条件和表级约束条件。

1)列级约束条件

Sname char(7) NOT NULL--取值非空
Sage tinyint DEFAULT 18--默认值约束
Sno char(7) UNIQUE--限制列取值不重复
Sdept char(20) CHECK(Sdept='CS' OR Sdept='IS')--限制列的取值范围
Sno char(7) PRIMARY KEY--指定本列为主码
Sdept char(20) FOREIGN KEY (Sdept) REFERENCES SC(Sdept)--外码约束

2)表级约束条件

UNIQUE表级约束:

UNIQUE(Sno,Sname)--表示(Sno,Sname)这样的组合不允许重复
--但是在Sno或Sname的列中可以重复

PRIMARY表级约束:

PRIMARY KEY(Sno)--和在Sno进行列定义相同
PRIMARY KEY(Sno,Sname)--以(Sno,Sname)这样的组合作为表的主码

3)实例

CREATE TABLE Student
(
Sno char(7) PRIMARY KEY,
Sname char(10) NOT NULL,
Ssex char(2) CHECK(Ssex='男' OR Ssex='女'),
Sage tinyint CHECK(Sage>=15 AND Sage<=45),
Sdept char(20) DEFAULT '计算机系'
)

CREATE TABLE Course
(
Cno char(10),
Cname char(20) NOT NULL,
Ccredit tinyint CHECK(Ccredit>0),
Semester tinyint CHECK(Semester>0),
Period int CHECK(Period>0),
PRIMARY KEY(Cno)
)

CREATE TABLE SC
(
Sno char(7) NOT NULL,
Cno char(10) NOT NULL,
Grade tinyint,
CHECK(Grade>=0 AND Grade <=100),
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno)
)

5、修改基本表

在定义完表之后,我们还可能需要修改表的结构,修改表的方法如下:

--在SC表中添加XKLB列--添加新列
ALTER TABLE SC
ADD XKLB char(4)
--将XKLB的类型改为char(6)--修改列定义
ALTER TABLE SC
ALTER COLUMN XKLB char(6)
--删除Course表的Period列--删除列
ALTER TABLE Course
DROP COLUMN Period

约束添加:

--添加主码约束
ALTER TABLE SC
ADD CONSTRAINT PK_SC PRIMARY KEY(Sno)--ADD CONSTRAINT 约束名 PRIMARY KEY(列名)
ADD CONSTRAINT PK_SC PRIMARY KEY(Sno,Cno)--表级约束--添加唯一性约束
ALTER TABLE Course
ADD CONSTRAINT UK_C UNIQUE(Cno)--ADD CONSTRAINT 约束名 UNIQUE(列名[,列名1,列名2···])--添加外键约束
ALTER TABLE SC
ADD CONSTRAINT FK_SC FOREIGN KEY(Sno) REFERENCES Student(Sno)--ADD CONSTRAINT 约束名FOREIGN KEY(列名) REFERENCES 引用表名(列名)--添加默认值约束
ALTER TABLE SC
ADD CONSTRAINT DF_SC DEFAULT 1 FOR Grade--ADD CONSTRAINT 约束名 DEFAULT 默认值 FOR 列名--添加检查约束
ALTER TABLE Student
ADD CONSTRAINT CK_S CHECK(Sage>15 AND Sage<45)--ADD CONSTRAINT 约束名 CHECK(约束表达式)

6、删除基本表

DROP TABLE 表1[,表2,表3]
DROP TABLE Student

三、SQL数据操纵

1、数据查询

查询语句是数据库使用中最基本和最重要的语句之一,其功能是从数据中检索满足条件的数据。
数据来源可以是一张表、多张表或者视图。
查询结果是关系。
语句格式:

1)简单查询

--查询指定列
SELECT Sno,Sname FROM Student
--查询所有列
SELECT * FROM Student
--查询经过计算的列
SELECT Sname,2020-Sage FROM Student--第二列列名为空

2)改变列标题

①:列名 | 表达式 [AS] 列别名
②:列别名 = 列名 | 表达式

SELECT Sname 姓名,2020-Sage AS 出身年份 FROM Student

3)选择表中若干行

SELECT Sno FROM SC
--等价于
SELECT ALL Sno FROM SC
--在SELECT中缺省则为ALL
--DISTINCT关键字可以去重
SELECT DISTINCT Sno FROM SC

4)WHERE用于查询满足条件的元组

--比较
SELECT Sname FROM Student WHERE Sdept='IS'
SELECT Sname,Sage FROM Student WHERE Sage<20
SELECT Sname,Sage FROM Student WHERE NOT Sage>=20
--范围
SELECT Sname FROM Student WHERE Sage BETWEEN 20 AND 23
SELECT Sname FROM Student WHERE Sage>=20 AND Sage<=23
SELECT Sname FROM Student WHERE Sage NOT BETWEEN 20 AND 23
SELECT Sname FROM Student WHERE Sage<20 OR Sage>23
--集合
SELECT Sname FROM Student WHERE Sdept IN('IS','MA','CS')
SELECT Sname FROM Student WHERE Sdept NOT IN('IS','MA','CS')

5)字符串匹配

在字符匹配中有四种通配符:
_:匹配任意一个字符
%:匹配0个或多个字符
[]:匹配[]中的任意一个字符
[^]:不匹配[]中的任意一个字符

SELECT * FROM Student WHERE Sno LIKE '200215121'
SELECT * FROM Student WHERE Sname LIKE '王%'
SELECT * FROM Student WHERE Sname LIKE '[张刘李]%'
SELECT * FROM Student WHERE Sno LIKE '%[^235]'
SELECT * FROM Student WHERE Sno NOT LIKE '%[235]'

6)涉及空值的查询

空值(NULL)在数据库中有特殊的含义,代表不确定的值
判断某个值是否为NULL,只能用专门的判断NULL值的子句来完成IS NULLIS NOT NULL

SELECT Sno FROM SC WHERE Grade IS NULL
SELECT Sno FROM SC WHERE Grade IS NOT NULL

7)多重条件查询

运用ANDOR俩简介查询多个查询条件
其中AND的优先级高于OR

SELECT Sname FROM Student WHERE Sdept='IS' AND Sage<20

8)ORDER BY

ORDER BY <列名> [ASC | DESC][,<列名>···]
可以按一个或多个属性列排序
ASC:升序、DESC降序、缺省值为升序
当排序列含空值时:
ASC:排序列为空值的元组最先显示
DESC:排序列为空值的元组最后显示

SELECT Sno,Grade FROM SC WHERE Cno='3' ORDER BY Grade DESC

9)TOP限制结果集

SELECT TOP 3 Sname,Sage,Sdept FROM Student ORDER BY Sage DESC

10)聚集函数

聚集函数也称为集合函数或聚合函数、计算函数,其作用是对一组值进行计算并返回一个单值。SQL提供的聚合函数有:
COUNT(*):统计表中元组个数
COUNT(<列名>):统计本列列值个数
SUM(<列名>):计算列值综合
AVG(<列名>):计算列值平均值
MAX(<列名>):求列值最大值
MIN(<列名>):求列值最小值
COUNT(*)外,其他函数在计算过程中均忽略NULL

SELECT COUNT(*) 总人数 FROM Student
SELECT COUNT(Sno) 选课人数 FROM SC
SELECT SUM(Grade) 总成绩 FROM SC WHERE Sno='95122'
SELECT AVG(Grade) 平均成绩 FROM SC WHERE Cno='C01'
SELECT MAX(Grade) 最高分 FROM SC WHERE Cno='C01'
SELECT MIN(Grade) 最低分 FROM SC WHERE Cno='C01'

聚合函数不能出现在WHERE子句中

11)GROUP BY

GROUP BY可将计算控制在组一级,分组的目的是细化计算函数的作用对象
分组语句位置在WHERE子句的后边,一般形式为:
GROUP BY <分组依据列>
[HAVING <组过滤条件>]

SELECT Cno 课程号,COUNT(Sno) 选课人数 FROM SC GROUP BY Cno
SELECT Sno 学号,COUNT(Cno) 选课门数,AVG(Grade) 平均成绩
FROM SC GROUP BY Sno

暂时只学到了这里,之后再更新o(╥﹏╥)o

12)其他

2、数据更改

四、SQL数据控制

SQL Server 学习笔记——T-SQL相关推荐

  1. 【SQL Server学习笔记】SQL SERVER 视图

    视图包括:普通视图,索引视图,分布式分区视图. 关于视图的最佳实践: A.对视图进行性能优化的过程和普通的select查询语句的优化过程是一样的. B.不要在一个视图的定义中调用另一个视图. C.如果 ...

  2. 【SQL Server 学习系列】-- sql 随机生成中文名字

    [SQL Server 学习系列]-- sql 随机生成中文名字 原文:[SQL Server 学习系列]-- sql 随机生成中文名字 1 DECLARE @fName TABLE(Id INT I ...

  3. SQL Server学习笔记

    <SQL Server从入门到精通>学习笔记 1 数据管理技术的三个阶段:人工管理.文件系统.数据库系统. 2 数据库的组成:数据库.数据库管理系统.数据库管理员.硬件平台.软件平台5部分 ...

  4. sql server学习笔记——批处理语句、存储过程

    目录 批处理语句 1.批处理语句简介 示例一: 示例二: 存储过程 一.什么是存储过程 1.存储过程的简介 2.存储过程包含的内容 3.存储过程的优点 4.存储过程的分类 系统存储过程: 用户定义存储 ...

  5. 【SQL Server学习笔记】变更数据捕获(Change Data Capture)

    SQL Server的变更数据捕获(Change Data Capture,CDC),就是异步捕获表数据的修改,只有很少的性能开销,可以持续的更新其他数据源,比如,将联机事务处理数据库中的持续数据变化 ...

  6. SQL Server 学习笔记

    SQL Server 创建数据库 切换数据库 在表中插入数据 在表中查询数据 无条件查询 取消结果集中的重复行 在表中修改数据 在表中删除数据 表结构的修改 添加列 修改列 环境 SQL Server ...

  7. SQL SERVER学习笔记(二)数据库管理

    第二部分:数据库管理 单词记忆:transact:处理 create:创建 execute:执行.完成 一.     SQL Server的特性 1. 安装简便:为了便于安装.使用和管理,SQL Se ...

  8. SQL Server学习笔记6——LTRIM()函数(去掉空格)

    LTRIM()函数用于去掉字符串左边多余的空格. 语法格式如下 LTRIM(character_expression) //character_expression:字符或二进制数据表达式,可以是常量 ...

  9. 适合小白的SQL Server学习笔记

    升序ASC  降序DESC 统计某个字段count(字段),一般都需要根据该字段分组group by(字段) having的作用相当于where,但是where关键字不能与合计函数一起使用(例:sum ...

最新文章

  1. big endian little endian
  2. Python pyd pyc
  3. 金仓Linux安装版取消开机自启服务
  4. 使用Maven,Jetty和Tomcat在嵌入式容器中运行Java Web应用程序
  5. INTERNET的完整形式是什么?
  6. 设置git客户端不经过代理
  7. 隐藏版本信息号返回服务器名,Apache服务器隐藏版本号和系统
  8. python是什么意思中文、好学吗-爬虫Python入门好学吗?学什么?
  9. [高光谱] Hyperspectral-Classification-master 网络模型解析
  10. python实现Pandas电话数据分析
  11. 怎么把cad转化为jpg图片
  12. linux网易云打不开的问题
  13. 1236mysql_mysql报1236错误解决方法
  14. python机器人编程前景_机器人编程挑战python
  15. 校园网使用家用无线路由器
  16. 搬家感悟-勇敢做出决定,生活继续,自我成长
  17. 编程比赛项目和时间汇总
  18. 【黑马程序员】20天学会Java-基础阶段笔记
  19. 计算机视觉中的Transformer
  20. nacos详细安装部署与异常排解

热门文章

  1. EasyExcel操作API与示例
  2. 同源策略 - 学习/实践
  3. OpenAi 语法修正
  4. Java软件工程师[初级测试题]
  5. H264 FU-A解包分析
  6. WLAN——一篇让你从0到1了解无线局域网的文章
  7. 城市“断气”敲警钟 资源“价改”正逢时?
  8. 用laravel写一个API
  9. 第一周《人月神话》读书笔记-------黄志鹏
  10. CTF隐写(stegsolve)