《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 安装并启动 ...
随机推荐
- 【深度学习 论文篇 01-1 】AlexNet论文翻译
前言:本文是我对照原论文逐字逐句翻译而来,英文水平有限,不影响阅读即可.翻译论文的确能很大程度加深我们对文章的理解,但太过耗时,不建议采用.我翻译的另一个目的就是想重拾英文,所以就硬着头皮啃了.本文只 ...
- C++---使用类
运算符重载 概念 运算符重载就是想法转换, 目的是简化函数调用的方式 重载就是赋予新的含义, 运算符重载也是, 即同一个运算符可以有不同的功能 C++本身已经对一些运算符进行了重载, 同时C++允许程 ...
- Cookie&&Session&&jsp入门
会话技术 会话:一次会话中包含多次请求和响应. 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求间,共享数据 方式: 客户端会话技术:Coo ...
- 学习day43
开始学习html知识
- el-carousel手动切换图片
添加ref 和 点击哪个地方切换的方法 <div class="center"> <div class="pw between"& ...
- JVM内存管理面试常见问题全解
目录 一.什么是JVM 1.jvm的三个组成部分 二.类加载系统 1.类的加载过程 2.类加载器 三.双亲委派机制 1.双亲委派机制介绍 2.为什么要双亲委派机制 3.双亲委派机制的核心源码 4.全盘 ...
- Promise的then和catch如何影响状态的变化
记住两句话: 1.then正常返回resolved,里面有报错返回reject 1 const p1 = Promise.resolve().then(()=>{ 2 console.log(1 ...
- QGIS 3.14插件开发——Win10系统PyCharm开发环境搭建四步走
前言:最近实习要求做一个QGIS插件,网上关于QGIS 3.14插件开发环境搭建的文档不多,而且也不算太全面.正好实习的时候写了一个文档,在这里给大家分享一下. 因为是Word转的Markdown,可 ...
- linux系统如何查看内核版本、操作系统版本等信息
有时候需要查看linux系统的内核版本,可以有多种方法,方法如下:(下面以优麒麟系统为例) 方法1: 打开mate终端,在命令行输入以下命令: uname -a 运行效果如下: 如果只查看内核 ...
- 【Istio实际操作篇】Istio入门,10分钟快速安装
@ 目录 前言 本文说明 请大家务必查看 环境准备 详细版 入门:搭建步骤 Istio软件包下载 下载Istio 卸载 简洁版 安装 卸载 学习不走弯路,gz号「yeTechLog」 前言 上一篇讲了 ...