《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 安装并启动 ...
随机推荐
- 手撕spring核心源码,彻底搞懂spring流程
引子 十几年前,刚工作不久的程序员还能过着很轻松的日子.记得那时候公司里有些开发和测试的女孩子,经常有问题解决不了的,不管什么领域的问题找到我,我都能帮她们解决.但是那时候我没有主动学习技术的意识,只 ...
- Python入门-多进程
1.获取本机CPU # 早期的CPU是单核:实现多个程序并行,在某一时间点,其实只有一个进程 # 后来硬件多核CPU:多个进程是并行执行. from multiprocessing import cp ...
- numpy教程04---ndarray的索引
欢迎关注公众号[Python开发实战], 获取更多内容! 工具-numpy numpy是使用Python进行数据科学的基础库.numpy以一个强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变 ...
- 查找SQL SERVER卡顿语句
SELECT [session_id], [blocking_session_id] AS '正在阻塞其他会话的会话ID', DB_NAME([database_id]) AS '数据库名称', [r ...
- 公私钥 SSH 数字证书
公私钥 SSH 数字证书 小菜鸟今天买了华为云一台服务器,在使用公私钥远程登录服务器的时候,忘记了相关公钥私钥的原理和一些应用了,今天复习一波做个记录. 相关概念 公钥:公钥用来给数据加密,用公钥加密 ...
- nodejs mysql pool 只能插入10条记录或者较少记录
BEGIN; 解决方案:从连接池获取到的Connection,执行完操作后,必须及时关闭! 即:connection.end(); 使用后发现console有打印出警告信息,大致意思为 end() 方 ...
- Spring的3级缓存和循环引用的理解
此处是我自己的一个理解,防止以后忘记,如若那个地方理解不对,欢迎指出. 一.背景 在我们写代码的过程中一般会使用 @Autowired 来注入另外的一个对象,但有些时候发生了 循环依赖,但是我们的代码 ...
- rabbitmq 安装延时队列插件rabbitmq-delayed-message-exchange
1.下载rabbitmq-delayed-message-exchange(注意版本对应) 链接:https://github.com/rabbitmq/rabbitmq-delayed-messag ...
- Linux Centos7 根分区磁盘扩容[详解]
CentOS7 根分区扩容 [详细过程] 前提 1.如果原来的系统根分区为逻辑卷分区 则可以使用如下的方法 如果不是则不可以 2.如果原来的系统根分区不是逻辑卷分区 则不可以扩展只能再添加挂在磁盘进行 ...
- Vue图片浏览组件v-viewer使用
简单介绍v-viewer的两种使用方法: Demo 安装依赖: npm install v-viewer --save 全局引入 import Viewer from 'v-viewer' impor ...