《SQL Server基础——SQL语句》
SQL Server基础——SQL语句
一、创建和删除数据库;
1.创建数据库(默认化初始值)
格式:
CREATE DATABASE 数据库名称
例如:
CREATE DATABASE SCC
2.创建数据库(自定义初始值)
格式:
CREATE DATABASE 数据库名
ON PRIMARY
(
NAME='逻辑名称',
FILENAME='文件存储路径'
)
LOG ON
(
NAME='逻辑名称',
FILENAME='文件存储路径'
)
例如:
CREATE DATABASE SCC
ON PRIMARY
(
NAME='SCC_Data',
FILENAME='D:\SQL\SCC\SCC_Data.mdf',
SIZE=4MB
)
LOG ON
(
NAME='SCC_Log',
FILENAME='D:\SQL\SCC\SCC_Log.ldf',
SIZE=2MB
)
3.删除数据库
格式:
DROP DATABASE 数据库名
例如:
DROP DATABASE SCC
二、创建数据表;
格式:
USE 数据库名
GO
CREATE TABLE 表名
(
列名 数据类型(长度) 列级约束
)
例如:
USE SCC
GO
CREATE TABLE 学生表
(
Sno CHAR(5) NOT NULL UNIQUE,
Sname CHAR(8) NOT NULL,
Sage SMALLINT DEFAULT 20, --默认值为20
Sex CHAR(2) CHECK(Sex='男' or Sex='女')
)
三、约束语句;
1.主键约束(PRIMARY KEY)
格式一:
列名 数据类型(长度) PRIMARY KEY
例如:
USE SCC
GO
CREATE TABLE 课程表
(
Cno CHAR(5) PRIMARY KEY
)
格式二:
CONSTRAINT 约束名 PRIMARY KEY(列名) --CONSTRAINTS语句
例如:
USE SCC
GO
CREATE TABLE 课程表
(
Sno CHAR(5),
Sname CHAR(8),
CONSTRAINT C1 PRIMARY KEY(Sno) --CONSTRAINT C1 PRIMARY KEY(Sno,Sname)————双主键
)
2.外键约束(FOREIGN KEY )
格式:
CONSTRAINT 约束名 FOREIGN KEY(列名) REFERENCES 被引用表的名称(列名)
例如:
USE SCC
GO
CREATE TABLE 课程表
(
Cno CHAR(5),
CONSTRAINT C1 PRIMARY KEY(Cno)
)
GO
CREATE TABLE 选课表
(
Cno CHAR(5),
Sno CHAR(5),
CONSTRAINT C2 PRIMARY KEY(Sno),
CONSTRAINT C3 FOREIGN KEY(Cno) REFERENCES 课程表(Cno)
)
3.非空约束(NOT NULL)
格式:
列名 数据类型(长度) NOT NULL
例如:
USE SCC
GO
CREATE TABLE 课程表
(
Cno CHAR(5) NOT NULL
)
4.唯一约束(UNIQUE)
格式:
列名 数据类型(长度) UNIQUE
例如:
USE SCC
GO
CREATE TABLE 课程表
(
Cno CHAR(5) UNIQUE
)
四、修改语句;
1.添加数据
格式:
INSERT INTO 表名(列名1, 列名2) VALUES(数据1, 数据2);
例如:
INSERT INTO 学生表(Sid, Sname) VALUES(3, '陈宇辉');
2.更改数据
格式:
UPDATE 表名
SET 列名1=新值1, 列名2=新值2
WHERE 过滤条件
例如:
UPDATE 学生表
SET Score='99', Sage='25'
WHERE Sname='陈宇辉'
2.删除数据(一行)
格式:
DELETE
FROM 表名
WHERE 列名='值'
AND 列名 not in ('值1', '值2')
例如:
DELETE
FROM 学生表
WHERE Sno = '8001'
AND SAGE not in ('20', '21')
3.删除约束
格式:
ALTER TABLE 表名 DROP CONSTRAINT 约束名
例如:
ALTER TABLE 选课表 DROP CONSTRAINT C2
五、终局之战;
1. 断开数据库连接
格式:
ALTER DATABASE 数据库名
SET OFFLINE WITH ROLLBACK IMMEDIATE
例如:
ALTER DATABASE SCC
SET OFFLINE WITH ROLLBACK IMMEDIATE
2. 分离数据库
格式:
EXEC sp_detach_db @dbname=N'数据库名'
例如:
EXEC sp_detach_db @dbname=N'SCC'
3.附加数据库
格式:
EXEC sp_attach_db @dbname=N'数据库名',
@filename1=N'.mdf文件的存储路径',@filename2=N'.ldf文件的存储路径'
例如
EXEC sp_attach_db @dbname=N'SCC',
@filename1=N'D:\SQL\SCC\SCC_Data.mdf', @filename2=N'D:\SQL\SCC\SCC_Log.ldf'
六、查询语句;
1.查询某列
格式:
SELECT 列名
FROM 表名
WHERE 查询条件
例如:
USE SCC
GO
SELECT SNO, SNAME
FROM STUDENT
WHERE SDEP='数学系'
2.自定义查询结果
格式:
SELECT 列名 as 重命名
FROM 表名
WHERE 查询条件
SELECT 列名*0.8 --将查询数据乘以0.8后输出
FROM 表名
WHERE 查询条件
例如:
USE SCC
GO
SELECT SN, SGRADE, SGRADE*0.8 as 成绩
FROM SC
WHERE CN='C1'
3.正倒序排列
格式:
ORDER BY 列名 DESC --降序排列
ORDER BY 列名 ASC --升序排列
ORDER BY 列名1 DESC, 列名2 ASC --先按“列名1”降序排列,若“列名1”相同,则按“列名2”升序排列
ORDER BY 2 DESCA --按第二列降序排列
例如:
USE SCC
GO
SELECT SN, SGRADE
FROM SC
WHERE CN='C1'
ORDER BY SGRADE DESC, SN ASC
3.去除重复项
格式:
SELECT 列名
FROM 表名
WHERE 查询条件
例如:
USE SCC
GO
SELECT distinct SNO, SNAME
FROM STUDENT
WHERE SDEP='数学系'
4.创建一个由查询结果组成的新数据表
格式:
SELECT 列名
INTO 新表名
FROM 表名
WHERE 查询条件
例如:
SELECT *
INTO TU_STUDENT
FROM STUDENT
WHERE SDEP='计算机系'
4.插入
格式:
SELECT 列名
FROM 表名
WHERE 查询条件
例如:
USE SCC
GO
SELECT SNO, SNAME
FROM STUDENT
WHERE SDEP='数学系'
INSERT into SC_C
select COURSE.CNO, COURSE.CNAME,avg(SC.SGRADE)
from SC, COURSE
where SC.CN=COURSE.CNO
group by COURSE.CNO, COURSE.CNAME
七、分类汇总
1.求总人数
格式:
SELECT count(*)
FROM 表名
例如:
USE SCC
GO
SELECT count(*)
FROM STUDENT
2.求最高值和最小值
代码:
SELECT max(列名), min(列名)
FROM 表名
WHERE 查询条件
例如:
USE SCC
GO
SELECT COURSE.CNAME, MAX(SC.SGRADE), MIN(SC.SGRADE)
FROM SC, COURSE
WHERE SC.CN=COURSE.CNO
GROUP BY COURSE.CNAME --以COURSE.CNAME为依据分组
3.求平均值
代码:
SELECT AVG(列名)
FROM 表名
WHERE 查询条件
例如:
USE SCC
GO
SELECT STUDENT.SNAME, AVG(SC.SGRADE)
FROM STUDENT, SC
WHERE STUDENT.SNO=SC.SN
GROUP BY STUDENT.SNAME
八、连接查询
1.两种连接方式
格式一:
SELECT 列名
FROM 表名1, 表名2
WHERE 表名1.列名=表名2.列名
例如:
USE SCC
GO
SELECT *
FROM STUDENT, SC
WHERE STUDENT.SNO=SC.SN
格式二:
SELECT 列名
FROM 表名1 JOIN 表名2 ON 表名1.列名=表名2.列名
例如:
USE SCC
GO
SELECT *
FROM STUDENT JOIN SC ON STUDENT.SNO=SC.SN
九、特殊查询
1.姓张的同学
代码:
USE SCC
GO
SELECT *
FROM STUDENT
WHERE SNAME LIKE '张%'
2.数学系或计算机系的同学
代码:
USE SCC
GO
SELECT *
FROM STUDENT
WHERE (SDEP='数学系' or SDEP='计算机系')
3.缺少了成绩的同学
代码:
USE SCC
GO
SELECT *
FROM SC
WHERE SGRADE is NULL
4.选修课超过三门的学生学号
代码:
USE SCC
GO
SELECT
FROM SC
GROUP BY SN having count(*)>3
5.求各系的男女生人数
代码:
USE SCC
GO
SELECT SDEP, SSEX, COUNT(*)
FROM STUDENT
GROUP BY SDEP, SSEX
ORDER BY SDEP
6.查询每一门课的间接先行课
代码:
USE SCC
GO
SELECT X.CNO, Y.PRECNO
FROM COURSE X, COURSE Y
WHERE X.PRECNO=Y.CNO
7.求 C1 课程的成绩高于张三的学生
代码:
USE SCC
GO
SELECT *
FROM SC, STUDENT
WHERE SC.CN='C1'
AND STUDENT.SNO=SC.SN
AND SC.SGRADE>
(
SELECT SC.SGRADE
FROM SC, STUDENT
WHERE SC.CN='C1'
AND STUDENT.SNAME='张三'
AND STUDENT.SNO=SC.SN
)
8.查询选修了全部课程的学生
代码:
【25】查询选修了全部课程的学生
USE SCC
GO
SELECT SNAME
FROM STUDENT
WHERE NOT EXISTS
(
SELECT *
FROM COURSE
WHERE NOT EXISTS
(
SELECT *
FROM SC
WHERE SC.SN=STUDENT.SNO
AND SC.CN=COURSE.CNO
)
)
9.求至少选修了学号为“S2”的学生所选修的全部课程的学生学号和姓名
代码:
USE SCC
GO
SELECT SNAME, SNO
FROM STUDENT
WHERE SNO NOT IN('S2')
AND SNO IN
(
SELECT SN
FROM SC X
WHERE NOT EXISTS
(
SELECT *
FROM SC Y
WHERE Y.SN='S2'
AND NOT EXISTS
(
SELECT *
FROM SC Z
WHERE Y.CN=Z.CN
AND X. SN=Z.SN
)
)
)
10.类别中最高的图书定价不低于全部按类别分组的图书平均定价的 2 倍
USE Book
GO
SELECT BType
FROM BookInfo
GROUP BY BType
having max(BPrice)>=ALL
(
SELECT AVG(BPrice)*2
FROM BookInfo
GROUP BY BType
)
《SQL Server基础——SQL语句》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- [前端学习]vue的指令学习记录 vu-if | text | for | on | model | bind | pre
vue的指令学习记录 vue-if | text | for | on | model - 目录 vue的指令学习记录 vue-if | text | for | on | model ... 预备 ...
- The 18th Zhejiang Provincial Collegiate Programming Contest
The 18th Zhejiang Provincial Collegiate Programming Contest GYM链接 https://codeforces.com/gym/103055 ...
- JavaWeb学习day2-web入门&随笔
Tomcat详解: 1默认端口号: Tomcat:8080 Mysql:3306 http:80 https:443 2默认主机名:localhost 地址:127.0.0.1 3网站应用默认存放位置 ...
- LevelDB 学习笔记2:合并
LevelDB 学习笔记2:合并 部分图片来自 RocksDB 文档 Minor Compaction 将内存数据库刷到硬盘的过程称为 minor compaction 产出的 L0 层的 sstab ...
- CentOS8 AnolisOS8 yum安装 No match for argument: htop Error: Unable to find a match: htop
这里写自定义目录标题 CentOS8 AnolisOS8 yum安装失败 安装失败原因 阿里云官方镜像主页 正确的操作步骤 学习交流 My Blog 技术交流 CentOS8 AnolisOS8 yu ...
- html_学习所有标签使用
<!DOCTYPE html><!--声明为HTML5文档--><html lang="en"><head><!-- 页面表头 ...
- 忘记VMware vcenter的Administrator@vsphere.local密码
忘记VMware vcenter的Administrator@vsphere.local密码的解决办法一. 重置密码:ssh root@192.168.230.100Connecting to 192 ...
- 开发一个不需要重写成Hive QL的大数据SQL引擎
摘要:开发一款能支持标准数据库SQL的大数据仓库引擎,让那些在Oracle上运行良好的SQL可以直接运行在Hadoop上,而不需要重写成Hive QL. 本文分享自华为云社区< ...
- 掌握AI学习路上核心理论知识,你绝对不能错过这份最全资料包
人工智能成为当下科技发展的代表之一,持续受到了不少追捧,不管你是否是这一专业的学生或者职场人,学习并掌握一项新潮技能总是不会被同龄人淘汰的.我曾经问过别人.也被别人问过关于学习人工智能(AI)最好的方 ...
- 干货 | 手把手教你搭建一套OpenStack云平台
1 前言 今天我们为一位朋友搭建一套OpenStack云平台. 我们使用Kolla部署stein版本的OpenStack云平台. kolla是用于自动化部署OpenStack的一个项目,它基于dock ...