use 学生数据库;
drop database 学生数据库;
create database 学生数据库
ON
(
NAME = 学生数据库_数据文件,
FILENAME='E:\sql sever 2000\学生数据库_数据文件.MDF',
SIZE=10,
MAXSIZE =50,
FILEGROWTH=5
)
LOG ON
(NAME = 学生数据库_日志文件,
FILENAME='E:\sql sever 2000\学生数据库_日志文件.LDF',
SIZE=5MB,
MAXSIZE=25MB,
FILEGROWTH=5MB
)
GO
CREATE TABLE 学生表
(
SNO CHAR(4),
SN CHAR(8),
SEX CHAR(2) NOT NULL,
AGE INT NOT NULL,
DEPT INT NOT NULL,
PRIMARY KEY(SNO),
CHECK (AGE BETWEEN 14 AND 45),
CHECK (SEX='男'OR SEX='女')
)
CREATE TABLE 课程表
(
CNO CHAR(4),
CN CHAR(8) NOT NULL,
PRIMARY KEY(CNO)
)
CREATE TABLE 学生选课表
(
SNO CHAR(4),
CNO CHAR(4) NOT NULL,
GRADE INT NULL,
PRIMARY KEY(SNO,CNO),
FOREIGN KEY(SNO) REFERENCES 学生表(SNO),
FOREIGN KEY(CNO) REFERENCES 课程表(CNO)
)
insert into 学生表 values( 'S1','徐琳', '女', 17,2);
insert into 学生表 values( 'S2','李国华','男', 18,6);
insert into 学生表 values( 'S3','徐萍', '女', 20, 1);
insert into 学生表 values( 'S4','林新明', '男', 23, 6);
insert into 学生表 values( 'S5','张家杰', '男', 19, 6) ;
insert into 学生表 values( 'S6','张婷', '女', 21, 3);
insert into 学生表 values( 'S7','赵大地', '男', 18, 6) ;
insert into 学生表 values( 'S8','赵树林', '男', 19, 3);
insert into 课程表 values( 'C1','数学') ;
insert into 课程表 values( 'C2','英语');
insert into 课程表 values( 'C3','C语言') ;
insert into 课程表 values( 'C4','数据库');
insert into 课程表 values( 'C5','政治') ;
insert into 课程表 values( 'C6','物理');
insert into 课程表 values( 'C7','心理学');
insert into 学生选课表 values( 'S1','C1',80);
insert into 学生选课表 values( 'S1','C2',85);
insert into 学生选课表 values( 'S1','C6',75);
insert into 学生选课表 values( 'S1','C4',56);
insert into 学生选课表 values( 'S1','C5',90);
insert into 学生选课表 values( 'S2','C1',47);
insert into 学生选课表 values( 'S2','C3',80);
insert into 学生选课表 values( 'S2','C4',75);
insert into 学生选课表 values( 'S2','C5',70);
insert into 学生选课表 values( 'S6','C1',95);
insert into 学生选课表 values( 'S6','C2',80);
insert into 学生选课表 values( 'S6','C3',87);
insert into 学生选课表 values( 'S3','C1',75);
insert into 学生选课表 values( 'S3','C2',70);
insert into 学生选课表 values( 'S3','C3',85);
insert into 学生选课表 values( 'S3','C4',86);
insert into 学生选课表 values( 'S3','C5',90);
insert into 学生选课表 values( 'S3','C6',99);
insert into 学生选课表 values( 'S4','C1',83);
insert into 学生选课表 values( 'S4','C2',85);
insert into 学生选课表 values( 'S4','C3',83);
insert into 学生选课表 values( 'S5','C2',99);
SELECT * FROM 课程表; --*表示表中的所有列
SELECT * FROM 课程表;
SELECT * FROM 学生选课表;
SELECT SNO FROM 学生选课表;
SELECT DISTINCT SNO FROM 学生选课表;  --DISTINCT 在结果中消除重复行
--WHERE 子句限定查询条件
--WHERE 子句用来限定查询条件,可用条件表达式,也可以用着键字来。
/*
条件表达式有两种:
1、算术表达式: >,<,=,<>,>=,<=,!>,!<,!=
2、逻辑表达式:NOT,AND ,OR
关键字是:BETWEEN, IN ,NOT IN
*/
USE 学生数据库;
--从学生中,检索出分数大于85,小于95之间的学生号及课程号,并且汉字显示属性
SELECT  SNO 学生号,SNO 课程号 FROM 学生选课表  WHERE GRADE>85 AND GRADE <95;
--从学生中,检索出学号分别的S2,S4,S6的学生姓名,年龄,并且汉字显示属性
SELECT SN 学生姓名, AGE 年龄 FROM 学生表 WHERE SNO IN('S2','S4','S6');
--多表查询
--1、把多张表的名字写在FROM 后面,然后用WHERE子句限定表之间的连接条件
--2、用JOIN和ON两个关键字,JOIN 用于连接两张表,ON 用于给出两张表相连条件
--检索李国华同学所学课程的课程号,课程名和成绩,结果标题用中文
SELECT 课程表.CNO 课程号,CN 课程名, GRADE 成绩 FROM 学生选课表,课程表,学生表 WHERE
学生选课表.CNO =课程表.CNO AND 学生表.SNO=学生选课表.SNO AND 学生表.SN='李国华';
SELECT 课程表.CNO 课程号,CN 课程名, GRADE 成绩 FROM 课程表
JOIN 学生选课表 ON 课程表.CNO =学生选课表.CNO
JOIN 学生表 ON 学生表.SNO= 学生选课表.SNO
WHERE 学生表.SN='李国华';
-------------------------------------自表查询---------------------------------
--检索所有比徐萍年龄大的学生姓名,年龄,性别以及徐萍的年龄
USE 学生数据库;
SELECT 学生表1.SN 比徐萍年龄大的学生名, 学生表1.SEX 性别,学生表1.AGE 年龄,学生表2.AGE 徐萍的年龄
FROM 学生表 学生表1, 学生表  学生表2
WHERE 学生表1.AGE>学生表2.AGE AND 学生表2.SN='徐萍';
--LIKE --- LIKE 子句必需与指定的符号联合起来,以构成查询条件-------
--1、检索姓赵的学生所在的系以及所选的课程名
SELECT DEPT 系别, CN 课程名 FROM 学生表,课程表,学生选课表
WHERE 学生表.SNO=学生选课表.SNO AND 课程表.CNO=学生选课表.CNO AND SN LIKE'张%';
SELECT DEPT 系别, CN 课程名 FROM 学生表
JOIN 学生选课表 ON 学生表.SNO=学生选课表.SNO
JOIN 课程表 ON 课程表.CNO=学生选课表.CNO
WHERE SN LIKE '张%';
--检索学生成绩高于90分的学生名,所选的课程名以及成绩,结果标题用中文
SELECT SN 学生名,CN 课程名,GRADE 成绩 FROM 学生表
JOIN 学生选课表 ON 学生选课表.SNO=学生表.SNO
JOIN 课程表 ON 课程表.CNO=学生选课表.CNO
WHERE GRADE LIKE '9%';
--------------------复杂查询-------------------------------
--用多条SELECT ... FROM ...WHERE 语句实现嵌套查询
--查出与张婷同一个系的学生名
SELECT SN FROM 学生表 WHERE DEPT IN
(SELECT DEPT FROM 学生表 WHERE SN='张婷');
--查出和赵树林同年龄的学生名,其结果将不包括赵树林本人。
SELECT SN 与赵树林同年龄的学生名 FROM 学生表 WHERE AGE
IN (SELECT AGE FROM 学生表 WHERE  SN='赵树林')
AND SN<>'赵树林';
/*
分析:
1、用子句找出赵树林的年龄是19  SELECT AGE FROM 学生表 WHERE SN='赵树林';
2、然后找出年龄为19的学生名  SELECT SN FROM 学生表 WHERE AGE =19
3、最后用IN关键字把以上两部分联系起来,查出和赵树林同年龄的学生,并用<>运算排队赵树林
*/
--找出同时选学课程号为C3和C5的学生号,学生名和性别
SELECT 学生表.SNO 学生号,SN 学生名,SEX 性别 FROM 学生表,学生选课表 WHERE 学生表.SNO= 学生选课表.SNO AND CNO='C3'AND 学生表.SNO
IN
( SELECT SNO FROM 学生选课表 WHERE CNO='C5');
----///------
SELECT 学生表.SNO ,SN,SEX FROM 学生表 JOIN 学生选课表 ON 学生表.SNO=学生选课表.SNO
WHERE CNO='C3' AND 学生表.SNO IN(SELECT SNO FROM 学生选课表 WHERE CNO='C5');
/*
分析:1、选学课程号为C5的学生号
      2、选学课程号为C3的学生号,学生名和年龄
      3、把第一步与第二步进行'与'运算
*/
--找出选学课程号为C3和课程名为政治的学生号和学生名
SELECT SNO,SN FROM 学生表 WHERE SNO 
IN(
SELECT SNO FROM 学生选课表 WHERE CNO='C3' AND SNO
IN(
SELECT SNO FROM 课程表,学生选课表 WHERE 课程表.CNO=学生选课表.CNO AND 课程表.CN='政治'));
--------///---------
SELECT 学生表.SNO,SN FROM 学生表 JOIN 学生选课表 ON 学生表.SNO =学生选课表.SNO
WHERE CNO ='C3' AND 学生表.SNO IN(
SELECT SNO FROM 学生选课表 WHERE CNO IN (SELECT CNO FROM 课程表 WHERE CN='政治')
);
/* 分析:1、先找出课程名为政治的课程号是C5
         2、找出由第一步找出的课程号为C5的学生号
     3、找出选学课程号为C3的学生号和学生名
         4、对第二步和第三步进行‘与’运算
*/
----NOT IN-----
--找出没有选择课程号为C3的学生名
SELECT SN FROM 学生表 WHERE SNO NOT IN(
SELECT SNO FROM 学生选课表 WHERE CNO='C3');
/* 分析:1、在学生选课表中,找出课程号是C3的学生号
     2、在学生表中,找出学生号不是C3的学生号的学生名
         3、把第一步插入到第二步中,即本题结果
注:使用IN('C1','C2')这种情况是‘或’的关系,当使用NOT IN('C1','C2')则是‘与’的关系
*/
----EXISTS, NOT EXISTS 查询
--查询选修课程号为C4的学生号和学生名,分别用EXISTS 和IN 两种关键字来查询
--1、用EXISTS
SELECT SNO ,SN FROM 学生表 WHERE  EXISTS
(SELECT * FROM 学生选课表 WHERE 学生选课表.SNO=学生表.SNO AND 学生选课表.CNO ='C4');
/*
SELECT SNO ,SN FROM 学生表 WHERE  EXISTS
(SELECT 学生选课表.SNO ,SN FROM 学生选课表 WHERE 学生选课表.SNO=学生表.SNO AND 学生选课表.CNO ='C4');
1、在EXISTS 关键字的嵌套查询中,外围查询的数据表与嵌套子句中的数据表之间连接,是通过嵌套子句中
列出两张表连接条件
2、在嵌套子句(select * .....)中,跟在SELECT 关键字后面是的*而不是列名。
*/
SELECT SNO ,SN FROM 学生表 WHERE SNO IN
(SELECT SNO FROM 学生选课表 WHERE CNO='C4');
--找出没有选择课程号为C3的学生名
SELECT SN FROM 学生表 WHERE SNO NOT IN
(SELECT SNO FROM 学生选课表 WHERE CNO='C3');
---------------------------------------------------------------
SELECT SN FROM 学生表 WHERE NOT EXISTS
(SELECT SNO FROM 学生选课表 WHERE  学生选课表.SNO=学生表.SNO AND 学生选课表.CNO='C3');
--NOT EXISTS 能够方便地解决'没有...','不存在','所有'查询难题
--检索选学了所有课程的学生名和学生号
SELECT SN 学生名, SNO 学生号 FROM 学生表
WHERE NOT EXISTS
(SELECT * FROM 课程表 WHERE NOT EXISTS
(SELECT * FROM 学生选课表 WHERE 学生表.SNO=学生选课表.SNO AND 课程表.CNO=学生选课表.CNO));
/*
1、检索课程表中的课程,这些课程在学生选课表中不存在
2、如果第一步没有结果,表示不存在这样的学生,没有课程,他们没有选。即:存在选学了所有课程的学生
3、如果第一步有结果,表示存在这样的学生,有课程,他们没有选,即:不存在选学了所有课程的学生。
*/
-----------------------函数查询--------------------------------------
--1、检索学校有多少个学生,多少个系,学生的平均年龄,学生最大年龄,学生最小年龄,结果标题用中文.
SELECT COUNT(SNO) 学生总数,COUNT(DISTINCT DEPT) 系别总数,AVG(AGE) 学生平均年龄, MAX(AGE) 学生最大年龄,
MIN(AGE) 学生最小年龄 FROM 学生表;
--跟在GROUP BY 后面的列名,应该是跟在关键字SELECT 后面的列名相同
--GROUP BY 后面的列可以是任意多
--2、按性别计算学生的平均年龄
SELECT SEX 性别,AVG(AGE) 平均年龄 FROM 学生表 GROUP BY SEX;
--按学生学号,性别,年龄来计算学生的平均成绩
SELECT 学生表.SNO 学号,SEX 性别,AGE 年龄 ,AVG (GRADE)学生平均成绩 FROM 学生表,学生选课表
WHERE 学生选课表.SNO= 学生表.SNO
GROUP BY 学生表.SNO, SEX,AGE;
--找出选修的课程至少四门的学生的姓名,性别,年龄,平均成绩,选课门数。结果标题用中文
/*  HAVING 子句必须与GROUP BY 子句联合起来使用
    HAVING 子句给出分组查询的条件
    HAVING 子句的分组查询条件必须是统计函数
*/
SELECT SN 姓名, SEX 性别, AGE 年龄,AVG(GRADE) 平均成绩,COUNT(学生选课表.CNO) 选课门数
 FROM 学生选课表 JOIN 学生表 ON 学生选课表.SNO=学生表.SNO
JOIN  课程表 ON 学生选课表.CNO=课程表.CNO
GROUP BY SN,SEX,AGE
HAVING COUNT(学生选课表.CNO)>=4;
--找出选课在三门以上课程的学生的总成绩(不统计不及格的课程),并列出总成绩名次名单。结果标题用中文
SELECT SNO 学生号,SUM(GRADE) 总成绩 FROM 学生选课表 WHERE GRADE >=60
GROUP BY SNO
HAVING COUNT(*)>=3
ORDER BY 2 DESC;
--找出选学课程数据最多的学生
SELECT 学生表.SN 学生名 FROM 学生选课表, 学生表
WHERE 学生选课表.SNO=学生表.SNO
GROUP BY 学生表.SN
HAVING COUNT(*)>=ALL
(SELECT COUNT(*) FROM 学生选课表 GROUP BY SNO);
--学生选学的课程如果超过了四门课,则每门课加5分,请更新数据库
UPDATE 学生选课表 SET GRADE =GRADE+5
WHERE SNO IN (SELECT SNO FROM 学生选课表 GROUP BY SNO HAVING COUNT(*)>=4);

SQL 简单,复杂查询,基本函数查询相关推荐

  1. 加sql查询语句导出_搞不懂这些查询语句,SQL简单查询也无法从入门到熟练

    大纲: 一.基本的查询语句 二.指定查询条件 三.注释和SQL语句注意事项 四.运算符 五.谓词 一.基本的查询语句 从表中选取数据时需要使用select语句,也就是只从表中选出(select)必要数 ...

  2. sql server的跨库查询(简单实现)

    sql server怎么跨库查询? 因为程序里建立连接时已经有了服务器和数据库,   库        connGZ.Provider="SQLOLEDB.1"           ...

  3. sql简单查询和排序分组

    一.sql简单查询 1.简单查询语法 select 列名,列名 from 表明: select ...from:查询语句的关键字:(select后面跟是你要从数据库里取的数据,from后面跟表名,表示 ...

  4. SQL简单查询语句,语法

    ** SQL简单查询语法,语句 ** select * from where order by --先from 后 where 后 select 最后 order by select sbrlsh 病 ...

  5. SQL简单查询——学生课程表

    文章目录 一.学习目标 二.数表介绍 三.SQL简单查询 四.SQL复杂查询 一.学习目标 1.掌握 S E L E C T SELECT SELECT语句的语法格式,各句子的使用: 2.掌握别名的概 ...

  6. mysql查询并设置高亮_Thinkphp3.2.3设置MySql主从读写分离后,简单调用主数据库查询

    图/文:迷神 Thinkphp是一款不错的国产框架,使用范围广,应用也比较多.随着网站访问增大往往需要使用mysql主从同步功能,本身Thinkphp自带了主从读写分离的功能了. 但是我们经常有一个场 ...

  7. 浅谈SQL Server中统计对于查询的影响

    简介 SQL Server查询分析器是基于开销的.通常来讲,查询分析器会根据谓词来确定该如何选择高效的查询路线,比如该选择哪个索引.而每次查询分析器寻找路径时,并不会每一次都去统计索引中包含的行数,值 ...

  8. java查看sql视图_数据库的查询与视图

    第4章 数据库的查询和视图 4.1.1 选择列 通过SELECT语句的项组成结果表的列. ::= SELECT [ ALL |DISTINCT ] [ TOP n [ PERCENT ] [ WITH ...

  9. ScottGu之博客翻译-LINQ to SQL第三部分,查询数据库 (Part 3 - Querying our Database)

     本贴只为共享知识,更为简洁(即无英文的版本)将会发布在博客堂上,堂主正对此文进行审阅. 希望本贴能对您的LINQ to SQL语言的学习有一定的帮助! 原贴链接: http://weblogs.as ...

  10. SQL语言之多表查询(oracle)

    多表查询 当查询的数据并不是来源一个表时,需要使用多表连接操作完成查询.根据不同表中的 数据之间的关系查询相关联的数据. 一.笛卡尔乘积(Cartesian product) 在数学中,两个集合x和y ...

最新文章

  1. mgr在mysql中指是什么字段_MySQL MGR
  2. 给SharePoint页面加入自己定义页脚Custom footer
  3. python多线程扫描_python实现多线程扫描网站目录
  4. Maven(1)--坐标与依赖
  5. 一次旁站信息泄露的dedecms站点渗透
  6. P2664 树上游戏
  7. Linux 命令之 apt-get -- APT 软件包管理工具
  8. JDBC实现学生信息管理系统(仅增删改查)
  9. mysql 停数据库_mysql数据库突然停了
  10. 苹果电脑删除软件_5款Mac查杀恶意流氓软件,防护你的MacOS电脑,随时清理优化更加安全!...
  11. 最长回文子串问题:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
  12. za压缩图片的几种方法
  13. labview虚拟心电监测系统_使用LabVIEW进行心电信号处理
  14. jenkins+docker进行coverity检查自动构建
  15. 开源webrtc服务器对比
  16. 服务器ip映射端口,一个公网IP对应多台服务器端口映射问题
  17. SN74HC165驱动
  18. 《 iOS-checkIPA 》ipa 文件信息检查工具
  19. 关于C++的数据模型:LP32、ILP32、LLP64、LP64
  20. 蓝牙射频的杂散,谐波与FCC测试解密

热门文章

  1. 【数据挖掘】卷积神经网络 ( 池化 | 丢弃 | 批量规范化 | 卷积神经网络完整流程示例 | 卷积 | 池化 | 全连接 | 输出 | 卷积神经网络总结 )
  2. 【Android NDK 开发】NDK 交叉编译 ( NDK 函数库目录 | Linux 交叉编译环境搭建 | 指定头文件目录 | 指定函数库目录 | 编译 Android 命令行可执行文件 )
  3. Python基础:一起来面向对象 (二) 之搜索引擎
  4. Struts2 (三)OGLN
  5. 关于移动端 触摸事件导致子元素不能绑定事件
  6. C的指针疑惑:C和指针8数组
  7. [Android] 关于系统工具栏和全屏沉浸模式
  8. 一步一步学习Bootstrap系列--表单布局
  9. Binary Tree Postorder Traversal
  10. Angular学习记录一