当前位置: 首页 > news >正文

成都市网站建设_网站建设公司_数据统计_seo优化

physon可以做网站,绍兴seo包年排行榜,精美旅游网站案例,西安产品设计公司有哪些目录一、准备数据1、创建数据库2、创建学生表3、创建教师表4、创建课程表5、创建成绩表6、添加数据二、查询练习1、查询 student 表的所有行2、查询 student 表中的 name、sex 和 class 字段的所有行3、查询 teacher 表中不重复的 department 列4、查询 score 表中成绩在60-80之… 目录一、准备数据1、创建数据库2、创建学生表3、创建教师表4、创建课程表5、创建成绩表6、添加数据二、查询练习1、查询 student 表的所有行2、查询 student 表中的 name、sex 和 class 字段的所有行3、查询 teacher 表中不重复的 department 列4、查询 score 表中成绩在60-80之间的所有行区间查询和运算符查询5、查询 score 表中成绩为 85, 86 或 88 的行6、查询 student 表中 95031 班或性别为 女 的所有行7、以 class 降序的方式查询 student 表的所有行8、以 c_no 升序、degree 降序查询 score 表的所有行9、查询 95031 班的学生人数10、查询 score 表中的最高分的学生学号和课程编号子查询或排序查询11、计算分组平均值12、分组条件与模糊查询13、多表查询-114、多表查询-215、三表关联查询16、子查询加分组求平均分17、子查询 - 118、子查询 - 219、YEAR 函数与带 IN 关键字查询20、多层嵌套子查询21、多表查询22、子查询 - 323、UNION 和 NOTIN 的使用24、ANY 表示至少一个 - DESC ( 降序 )25、表示所有的 ALL26、复制表的数据作为条件查询27、子查询 - 428、条件加组筛选29、NOTLIKE 模糊查询取反30、YEAR 与 NOW 函数31、MAX 与 MIN 函数32、多段排序33、子查询 - 534、MAX 函数与子查询35、子查询 - 636、子查询 - 737、子查询 - 838、按等级查询参考一、准备数据 创建数据库-》创建学生表-》创建教师表-》创建课程表-》创建成绩表 1、创建数据库 -- 创建数据库 CREATE DATABASE select_test; -- 切换数据库 USE select_test;2、创建学生表 由学号、姓名、性别、出生年月日、所在年级组成。学号为主键。 -- 创建学生表 CREATE TABLE student (no VARCHAR(20) PRIMARY KEY,name VARCHAR(20) NOT NULL,sex VARCHAR(10) NOT NULL,birthday DATE, -- 生日class VARCHAR(20) -- 所在班级 );3、创建教师表 由教师编号、姓名、性别、出生年月日、职称、所在部门组成教师编号为主键。 -- 创建教师表 CREATE TABLE teacher (no VARCHAR(20) PRIMARY KEY,name VARCHAR(20) NOT NULL,sex VARCHAR(10) NOT NULL,birthday DATE,profession VARCHAR(20) NOT NULL, -- 职称department VARCHAR(20) NOT NULL -- 部门 );4、创建课程表 由课程号、课程名称、教师编号组成课程号为主键教师编号为外键。 -- 创建课程表 CREATE TABLE course (no VARCHAR(20) PRIMARY KEY,name VARCHAR(20) NOT NULL,t_no VARCHAR(20) NOT NULL, -- 教师编号-- 表示该 tno 来自于 teacher 表中的 no 字段值FOREIGN KEY(t_no) REFERENCES teacher(no) );5、创建成绩表 由学生学号、课程号、成绩组成。 学生学号、课程号均为外键。两者联合为主键。 因为一个学生要修多门课程每个课程都有一个成绩。如果只设学号or课程号为主键都会存在无法区分问题。 -- 成绩表 CREATE TABLE score (s_no VARCHAR(20) NOT NULL, -- 学生编号c_no VARCHAR(20) NOT NULL, -- 课程号degree DECIMAL, -- 成绩-- 表示该 s_no, c_no 分别来自于 student, course 表中的 no 字段值FOREIGN KEY(s_no) REFERENCES student(no), FOREIGN KEY(c_no) REFERENCES course(no),-- 设置 s_no, c_no 为联合主键PRIMARY KEY(s_no, c_no) );6、添加数据 添加学生表数据、添加教师表数据、添加课程表数据、添加添加成绩表数据。 -- 添加学生表数据 INSERT INTO student VALUES(101, 曾华, 男, 1977-09-01, 95033); INSERT INTO student VALUES(102, 匡明, 男, 1975-10-02, 95031); INSERT INTO student VALUES(103, 王丽, 女, 1976-01-23, 95033); INSERT INTO student VALUES(104, 李军, 男, 1976-02-20, 95033); INSERT INTO student VALUES(105, 王芳, 女, 1975-02-10, 95031); INSERT INTO student VALUES(106, 陆军, 男, 1974-06-03, 95031); INSERT INTO student VALUES(107, 王尼玛, 男, 1976-02-20, 95033); INSERT INTO student VALUES(108, 张全蛋, 男, 1975-02-10, 95031); INSERT INTO student VALUES(109, 赵铁柱, 男, 1974-06-03, 95031);-- 添加教师表数据 INSERT INTO teacher VALUES(804, 李诚, 男, 1958-12-02, 副教授, 计算机系); INSERT INTO teacher VALUES(856, 张旭, 男, 1969-03-12, 讲师, 电子工程系); INSERT INTO teacher VALUES(825, 王萍, 女, 1972-05-05, 助教, 计算机系); INSERT INTO teacher VALUES(831, 刘冰, 女, 1977-08-14, 助教, 电子工程系);-- 添加课程表数据 INSERT INTO course VALUES(3-105, 计算机导论, 825); INSERT INTO course VALUES(3-245, 操作系统, 804); INSERT INTO course VALUES(6-166, 数字电路, 856); INSERT INTO course VALUES(9-888, 高等数学, 831);-- 添加添加成绩表数据 INSERT INTO score VALUES(103, 3-105, 92); INSERT INTO score VALUES(103, 3-245, 86); INSERT INTO score VALUES(103, 6-166, 85); INSERT INTO score VALUES(105, 3-105, 88); INSERT INTO score VALUES(105, 3-245, 75); INSERT INTO score VALUES(105, 6-166, 79); INSERT INTO score VALUES(109, 3-105, 76); INSERT INTO score VALUES(109, 3-245, 68); INSERT INTO score VALUES(109, 6-166, 81);二、查询练习 1、查询 student 表的所有行 SELECT * FROM student;2、查询 student 表中的 name、sex 和 class 字段的所有行 SELECT name, sex, class FROM student;3、查询 teacher 表中不重复的 department 列 如果单纯使用 SELECT department FROM teacher;会发现有重复 -- 查询 teacher 表中不重复的 department 列 -- department: 去重查询 SELECT DISTINCT department FROM teacher;4、查询 score 表中成绩在60-80之间的所有行区间查询和运算符查询 -- 查询 score 表中成绩在60-80之间的所有行区间查询和运算符查询 -- BETWEEN xx AND xx: 查询区间, AND 表示 并且 SELECT * FROM score WHERE degree BETWEEN 60 AND 80; SELECT * FROM score WHERE degree 60 AND degree 80;5、查询 score 表中成绩为 85, 86 或 88 的行 -- 查询 score 表中成绩为 85, 86 或 88 的行 -- IN: 查询规定中的多个值 SELECT * FROM score WHERE degree IN (85, 86, 88);6、查询 student 表中 ‘95031’ 班或性别为 ‘女’ 的所有行 -- 查询 student 表中 95031 班或性别为 女 的所有行 -- or: 表示或者关系 SELECT * FROM student WHERE class 95031 or sex 女;7、以 class 降序的方式查询 student 表的所有行 -- 以 class 降序的方式查询 student 表的所有行 -- DESC: 降序从高到低 -- ASC默认: 升序从低到高 SELECT * FROM student ORDER BY class DESC; SELECT * FROM student ORDER BY class ASC;8、以 c_no 升序、degree 降序查询 score 表的所有行 -- 以 c_no 升序、degree 降序查询 score 表的所有行 SELECT * FROM score ORDER BY c_no ASC, degree DESC;9、查询 “95031” 班的学生人数 -- 查询 95031 班的学生人数 -- COUNT: 统计 SELECT COUNT(*) FROM student WHERE class 95031;10、查询 score 表中的最高分的学生学号和课程编号子查询或排序查询 首先找到最高分在哪儿然后把他选择出来 -- (SELECT MAX(degree) FROM score): 子查询算出最高分 SELECT s_no, c_no FROM score WHERE degree (SELECT MAX(degree) FROM score);降序排序然后选择第一条数据 -- 排序查询 -- LIMIT r, n: 表示从第r行开始查询n条数据 SELECT s_no, c_no, degree FROM score ORDER BY degree DESC LIMIT 0, 1;11、计算分组平均值 查询每门课的平均成绩 -- AVG: 平均值 SELECT AVG(degree) FROM score WHERE c_no 3-105; SELECT AVG(degree) FROM score WHERE c_no 3-245; SELECT AVG(degree) FROM score WHERE c_no 6-166;-- GROUP BY: 分组查询 这样就不需要一行一行地打了 SELECT c_no, AVG(degree) FROM score GROUP BY c_no;12、分组条件与模糊查询 查询 score 表中至少有 2 名学生选修并以 3 开头的课程的平均分数。 首先查询score表。 SELECT * FROM score; -- c_no 课程编号 --------------------- | s_no | c_no | degree | --------------------- | 103 | 3-105 | 92 | | 103 | 3-245 | 86 | | 103 | 6-166 | 85 | | 105 | 3-105 | 88 | | 105 | 3-245 | 75 | | 105 | 6-166 | 79 | | 109 | 3-105 | 76 | | 109 | 3-245 | 68 | | 109 | 6-166 | 81 | ---------------------分析表发现至少有 2 名学生选修的课程是 3-105 、3-245 、6-166 以 3 开头的课程是 3-105 、3-245 。也就是说我们要查询所有 3-105 和 3-245 的 degree 平均分。 首先把 c_no, AVG(degree) 通过分组查询出来 -- 首先把 c_no, AVG(degree) 通过分组查询出来 SELECT c_no, AVG(degree) FROM score GROUP BY c_no -------------------- | c_no | AVG(degree) | -------------------- | 3-105 | 85.3333 | | 3-245 | 76.3333 | | 6-166 | 81.6667 | --------------------再查询出至少有 2 名学生选修的课程 -- 再查询出至少有 2 名学生选修的课程 -- HAVING: 表示持有 HAVING COUNT(c_no) 2并且是以 3 开头的课程 -- 并且是以 3 开头的课程 -- LIKE 表示模糊查询% 是一个通配符匹配 3 后面的任意字符。 AND c_no LIKE 3%;把前面的SQL语句拼接起来后面加上一个 COUNT(*)表示将每个分组的个数也查询出来 -- 把前面的SQL语句拼接起来 -- 后面加上一个 COUNT(*)表示将每个分组的个数也查询出来。 SELECT c_no, AVG(degree), COUNT(*) FROM score GROUP BY c_no HAVING COUNT(c_no) 2 AND c_no LIKE 3%; ------------------------------ | c_no | AVG(degree) | COUNT(*) | ------------------------------ | 3-105 | 85.3333 | 3 | | 3-245 | 76.3333 | 3 | ------------------------------13、多表查询-1 查询所有学生的 name以及该学生在 score 表中对应的 c_no 和 degree 。 从student表中选出学号和姓名 从score表中选出学号、班级号、和分数。 SELECT no, name FROM student; ---------------- | no | name | ---------------- | 101 | 曾华 | | 102 | 匡明 | | 103 | 王丽 | | 104 | 李军 | | 105 | 王芳 | | 106 | 陆军 | | 107 | 王尼玛 | | 108 | 张全蛋 | | 109 | 赵铁柱 | ----------------SELECT s_no, c_no, degree FROM score; --------------------- | s_no | c_no | degree | --------------------- | 103 | 3-105 | 92 | | 103 | 3-245 | 86 | | 103 | 6-166 | 85 | | 105 | 3-105 | 88 | | 105 | 3-245 | 75 | | 105 | 6-166 | 79 | | 109 | 3-105 | 76 | | 109 | 3-245 | 68 | | 109 | 6-166 | 81 | ---------------------通过分析可以发现只要把 score 表中的 s_no 字段值替换成 student 表中对应的 name 字段值就可以了。 -- FROM...: 表示从 student, score 表中查询 -- WHERE 的条件表示为只有在 student.no 和 score.s_no 相等时才显示出来。 SELECT name, c_no, degree FROM student, score WHERE student.no score.s_no; -------------------------- | name | c_no | degree | -------------------------- | 王丽 | 3-105 | 92 | | 王丽 | 3-245 | 86 | | 王丽 | 6-166 | 85 | | 王芳 | 3-105 | 88 | | 王芳 | 3-245 | 75 | | 王芳 | 6-166 | 79 | | 赵铁柱 | 3-105 | 76 | | 赵铁柱 | 3-245 | 68 | | 赵铁柱 | 6-166 | 81 | --------------------------14、多表查询-2 查询所有学生的 no 、课程名称 ( course 表中的 name ) 和成绩 ( score 表中的 degree ) 列。 只有 score 关联学生的 no 因此只要查询 score 表就能找出所有和学生相关的 no 和 degree SELECT s_no, c_no, degree FROM score; --------------------- | s_no | c_no | degree | --------------------- | 103 | 3-105 | 92 | | 103 | 3-245 | 86 | | 103 | 6-166 | 85 | | 105 | 3-105 | 88 | | 105 | 3-245 | 75 | | 105 | 6-166 | 79 | | 109 | 3-105 | 76 | | 109 | 3-245 | 68 | | 109 | 6-166 | 81 | ---------------------然后观察 course 表 ------------------------ | no | name | ------------------------ | 3-105 | 计算机导论 | | 3-245 | 操作系统 | | 6-166 | 数字电路 | | 9-888 | 高等数学 | ------------------------只要把 score 表中的 c_no 替换成 course 表中对应的 name 字段值就可以了。 -- 增加一个查询字段 name分别从 score、course 这两个表中查询。 -- as 表示取一个该字段的别名。 SELECT s_no, name as c_name, degree FROM score, course WHERE score.c_no course.no; ------------------------------- | s_no | c_name | degree | ------------------------------- | 103 | 计算机导论 | 92 | | 105 | 计算机导论 | 88 | | 109 | 计算机导论 | 76 | | 103 | 操作系统 | 86 | | 105 | 操作系统 | 75 | | 109 | 操作系统 | 68 | | 103 | 数字电路 | 85 | | 105 | 数字电路 | 79 | | 109 | 数字电路 | 81 | -------------------------------15、三表关联查询 查询所有学生的 name 、课程名 ( course 表中的 name ) 和 degree 。 sname来自student表 cname来自course表 degree来自score表 只有 score 表中关联学生的学号和课堂号我们只要围绕着 score 这张表查询就好了。 -- 由于字段名存在重复使用 表名.字段名 as 别名 代替。 SELECT student.name as s_name, course.name as c_name, degree FROM student, score, course WHERE student.NO score.s_no AND score.c_no course.no;16、子查询加分组求平均分 查询 95031 班学生每门课程的平均成绩。 分为三个步骤 1、找到95031班的学生 SELECT no FROM student WHERE class 950312、以上面的学生号为查找对象在分数表中将学生号、课程号、分数打印出来 在 score 表中根据 student 表的学生编号筛选出学生的课堂号和成绩 -- IN (..): 将筛选出的学生号当做 s_no 的条件查询 SELECT s_no, c_no, degree FROM score WHERE s_no IN (SELECT no FROM student WHERE class 95031); --------------------- | s_no | c_no | degree | --------------------- | 105 | 3-105 | 88 | | 105 | 3-245 | 75 | | 105 | 6-166 | 79 | | 109 | 3-105 | 76 | | 109 | 3-245 | 68 | | 109 | 6-166 | 81 | ---------------------3、以课程号分组算平均成绩 SELECT c_no, AVG(degree) FROM score WHERE s_no IN (SELECT no FROM student WHERE class 95031) GROUP BY c_no; -------------------- | c_no | AVG(degree) | -------------------- | 3-105 | 82.0000 | | 3-245 | 71.5000 | | 6-166 | 80.0000 | --------------------17、子查询 - 1 查询在 3-105 课程中所有成绩高于 109 号同学的记录。 where的条件有两个1、课程号为3-105 2、在本门课程中分数高于109号同学的分数 SELECT * FROM score WHERE c_no 3-105 AND degree (SELECT degree FROM score WHERE s_no 109 AND c_no 3-105);18、子查询 - 2 查询所有成绩高于 109 号同学的 3-105 课程成绩记录。 不限制课程号只要成绩大于109号同学的3-105课程成绩就可以 SELECT * FROM score WHERE degree (SELECT degree FROM score WHERE s_no 109 AND c_no 3-105);19、YEAR 函数与带 IN 关键字查询 查询所有和 101 、108 号学生同年出生的 no 、name 、birthday 列。 -- YEAR(..): 取出日期中的年份 SELECT no, name, birthday FROM student WHERE YEAR(birthday) IN (SELECT YEAR(birthday) FROM student WHERE no IN (101, 108));20、多层嵌套子查询 查询 ‘张旭’ 教师任课的学生成绩表。 1、首先找到教师编号 SELECT NO FROM teacher WHERE NAME 张旭2、通过 course 表找到该教师课程号 SELECT NO FROM course WHERE t_no ( SELECT NO FROM teacher WHERE NAME 张旭 );3、通过筛选出的课程号查询成绩表 SELECT * FROM score WHERE c_no (SELECT no FROM course WHERE t_no ( SELECT no FROM teacher WHERE NAME 张旭 ) );反复套娃。。。 21、多表查询 查询某选修课程多于5个同学的教师姓名。 1、首先在 teacher 表中根据 no 字段来判断该教师的同一门课程是否有至少5名学员选修 -- 查询 teacher 表 SELECT no, name FROM teacher; ------------- | no | name | ------------- | 804 | 李诚 | | 825 | 王萍 | | 831 | 刘冰 | | 856 | 张旭 | ------------- SELECT name FROM teacher WHERE no IN (-- 在这里找到对应的条件 );2、查看和教师编号有有关的表的信息 SELECT * FROM course; -- t_no: 教师编号 ------------------------------ | no | name | t_no | ------------------------------ | 3-105 | 计算机导论 | 825 | | 3-245 | 操作系统 | 804 | | 6-166 | 数字电路 | 856 | | 9-888 | 高等数学 | 831 | ------------------------------3、在 score 表中将 c_no 作为分组并且限制 c_no 持有至少 5 条数据 -- 在此之前向 score 插入一些数据以便丰富查询条件。 INSERT INTO score VALUES (101, 3-105, 90); INSERT INTO score VALUES (102, 3-105, 91); INSERT INTO score VALUES (104, 3-105, 89); -- 查询 score 表 SELECT * FROM score; --------------------- | s_no | c_no | degree | --------------------- | 101 | 3-105 | 90 | | 102 | 3-105 | 91 | | 103 | 3-105 | 92 | | 103 | 3-245 | 86 | | 103 | 6-166 | 85 | | 104 | 3-105 | 89 | | 105 | 3-105 | 88 | | 105 | 3-245 | 75 | | 105 | 6-166 | 79 | | 109 | 3-105 | 76 | | 109 | 3-245 | 68 | | 109 | 6-166 | 81 | ---------------------SELECT c_no FROM score GROUP BY c_no HAVING COUNT(*) 5; ------- | c_no | ------- | 3-105 | -------4、根据筛选出来的课程号找出在某课程中拥有至少5名学员的教师编号 SELECT t_no FROM course WHERE no IN (SELECT c_no FROM score GROUP BY c_no HAVING COUNT(*) 5 ); ------ | t_no | ------ | 825 | ------5、在 teacher 表中根据筛选出来的教师编号找到教师姓名 SELECT name FROM teacher WHERE no IN (-- 最终条件SELECT t_no FROM course WHERE no IN (SELECT c_no FROM score GROUP BY c_no HAVING COUNT(*) 5) );22、子查询 - 3 查询 “计算机系” 课程的成绩表。 1、先找出 course 表中所有 计算机系 课程的编号 -- 通过 teacher 表查询所有 计算机系 的教师编号 SELECT no, name, department FROM teacher WHERE department 计算机系 --------------------------- | no | name | department | --------------------------- | 804 | 李诚 | 计算机系 | | 825 | 王萍 | 计算机系 | ----------------------------- 通过 course 表查询该教师的课程编号 SELECT no FROM course WHERE t_no IN (SELECT no FROM teacher WHERE department 计算机系 ); ------- | no | ------- | 3-245 | | 3-105 | ------- 2、根据这个编号查询 score 表 -- 根据筛选出来的课程号查询成绩表 SELECT * FROM score WHERE c_no IN (SELECT no FROM course WHERE t_no IN (SELECT no FROM teacher WHERE department 计算机系) ); --------------------- | s_no | c_no | degree | --------------------- | 103 | 3-245 | 86 | | 105 | 3-245 | 75 | | 109 | 3-245 | 68 | | 101 | 3-105 | 90 | | 102 | 3-105 | 91 | | 103 | 3-105 | 92 | | 104 | 3-105 | 89 | | 105 | 3-105 | 88 | | 109 | 3-105 | 76 | ---------------------23、UNION 和 NOTIN 的使用 查询 计算机系 与 电子工程系 中的不同职称的教师。 首先观察所有教师发现题目中要求我们找到的是804 and 856. 1、首先找计算机系里面的讲师这个讲师的职称不在电子工程系里面。 -- NOT: 代表逻辑非 SELECT * FROM teacher WHERE department 计算机系 AND profession NOT IN (SELECT profession FROM teacher WHERE department 电子工程系 )2、另外一个反过来 SELECT * FROM teacher WHERE department 电子工程系 AND profession NOT IN (SELECT profession FROM teacher WHERE department 计算机系 );3、使用union把两个集合拼接起来注意第一句话不要有分号 SELECT * FROM teacher WHERE department 计算机系 AND profession NOT IN (SELECT profession FROM teacher WHERE department 电子工程系 ) -- 合并两个集 UNION SELECT * FROM teacher WHERE department 电子工程系 AND profession NOT IN (SELECT profession FROM teacher WHERE department 计算机系 );24、ANY 表示至少一个 - DESC ( 降序 ) 查询课程 3-105 且成绩 至少 高于 3-245 的 score 表并且按照degree从高到低排序 1、首先把课程为3-105 和3-245 的成绩表选出来看看 SELECT * FROM score WHERE c_no 3-105; --------------------- | s_no | c_no | degree | --------------------- | 101 | 3-105 | 90 | | 102 | 3-105 | 91 | | 103 | 3-105 | 92 | | 104 | 3-105 | 89 | | 105 | 3-105 | 88 | | 109 | 3-105 | 76 | ---------------------SELECT * FROM score WHERE c_no 3-245; --------------------- | s_no | c_no | degree | --------------------- | 103 | 3-245 | 86 | | 105 | 3-245 | 75 | | 109 | 3-245 | 68 | ---------------------2、在 3-105 成绩中只要有一个大于从 3-245 筛选出来的任意行就符合条件。最后根据降序查询结果。 这里其实意思就是大于3-245成绩最小值即可 SELECT * FROM score WHERE c_no 3-105 AND degree ANY(SELECT degree FROM score WHERE c_no 3-245 ) ORDER BY degree DESC; --------------------- | s_no | c_no | degree | --------------------- | 103 | 3-105 | 92 | | 102 | 3-105 | 91 | | 101 | 3-105 | 90 | | 104 | 3-105 | 89 | | 105 | 3-105 | 88 | | 109 | 3-105 | 76 | ---------------------25、表示所有的 ALL 查询课程 3-105 且成绩高于 3-245 的 score 表。 也就是说在 3-105 每一行成绩中都要大于从 3-245 筛选出来全部行才算符合条件。 SELECT * FROM score WHERE c_no 3-105 AND degree ALL(SELECT degree FROM score WHERE c_no 3-245 ); --------------------- | s_no | c_no | degree | --------------------- | 101 | 3-105 | 90 | | 102 | 3-105 | 91 | | 103 | 3-105 | 92 | | 104 | 3-105 | 89 | | 105 | 3-105 | 88 | ---------------------26、复制表的数据作为条件查询 查询某课程成绩比该课程平均成绩低的 score 表。 1、首先查询每个课程的平均分 -- 查询平均分 SELECT c_no, AVG(degree) FROM score GROUP BY c_no; -------------------- | c_no | AVG(degree) | -------------------- | 3-105 | 87.6667 | | 3-245 | 76.3333 | | 6-166 | 81.6667 | --------------------2、查询 score 表 SELECT degree FROM score; -------- | degree | -------- | 90 | | 91 | | 92 | | 86 | | 85 | | 89 | | 88 | | 75 | | 79 | | 76 | | 68 | | 81 | --------3、将表 b 作用于表 a 中查询数据。ab两表均为score的别名 SELECT * FROM score a WHERE degree ((SELECT AVG(degree) FROM score b WHERE a.c_no b.c_no) ); --------------------- | s_no | c_no | degree | --------------------- | 105 | 3-245 | 75 | | 105 | 6-166 | 79 | | 109 | 3-105 | 76 | | 109 | 3-245 | 68 | | 109 | 6-166 | 81 | ---------------------27、子查询 - 4 查询所有任课 ( 在 course 表里有课程 ) 教师的 name 和 department 。 SELECT name, department FROM teacher WHERE no IN (SELECT t_no FROM course); ------------------------- | name | department | ------------------------- | 李诚 | 计算机系 | | 王萍 | 计算机系 | | 刘冰 | 电子工程系 | | 张旭 | 电子工程系 | -------------------------28、条件加组筛选 查询 student 表中至少有 2 名男生的 class 。 -- 查看学生表信息 SELECT * FROM student; ---------------------------------------- | no | name | sex | birthday | class | ---------------------------------------- | 101 | 曾华 | 男 | 1977-09-01 | 95033 | | 102 | 匡明 | 男 | 1975-10-02 | 95031 | | 103 | 王丽 | 女 | 1976-01-23 | 95033 | | 104 | 李军 | 男 | 1976-02-20 | 95033 | | 105 | 王芳 | 女 | 1975-02-10 | 95031 | | 106 | 陆军 | 男 | 1974-06-03 | 95031 | | 107 | 王尼玛 | 男 | 1976-02-20 | 95033 | | 108 | 张全蛋 | 男 | 1975-02-10 | 95031 | | 109 | 赵铁柱 | 男 | 1974-06-03 | 95031 | | 110 | 张飞 | 男 | 1974-06-03 | 95038 | ------------------------------------------ 只查询性别为男然后按 class 分组并限制 class 行大于 1。 SELECT class FROM student WHERE sex 男 GROUP BY class HAVING COUNT(*) 1; ------- | class | ------- | 95033 | | 95031 | -------29、NOTLIKE 模糊查询取反 查询 student 表中不姓 “王” 的同学记录。 -- NOT: 取反 -- LIKE: 模糊查询 SELECT * FROM student WHERE name NOT LIKE 王%; ---------------------------------------- | no | name | sex | birthday | class | ---------------------------------------- | 101 | 曾华 | 男 | 1977-09-01 | 95033 | | 102 | 匡明 | 男 | 1975-10-02 | 95031 | | 104 | 李军 | 男 | 1976-02-20 | 95033 | | 106 | 陆军 | 男 | 1974-06-03 | 95031 | | 108 | 张全蛋 | 男 | 1975-02-10 | 95031 | | 109 | 赵铁柱 | 男 | 1974-06-03 | 95031 | | 110 | 张飞 | 男 | 1974-06-03 | 95038 | ----------------------------------------30、YEAR 与 NOW 函数 查询 student 表中每个学生的姓名和年龄。 使用函数 YEAR(NOW()) 计算出当前年份减去出生年份后得出年龄。 SELECT name, YEAR(NOW()) - YEAR(birthday) as age FROM student; ----------------- | name | age | ----------------- | 曾华 | 42 | | 匡明 | 44 | | 王丽 | 43 | | 李军 | 43 | | 王芳 | 44 | | 陆军 | 45 | | 王尼玛 | 43 | | 张全蛋 | 44 | | 赵铁柱 | 45 | | 张飞 | 45 | -----------------31、MAX 与 MIN 函数 查询 student 表中最大和最小的 birthday 值。 SELECT MAX(birthday), MIN(birthday) FROM student; ------------------------------ | MAX(birthday) | MIN(birthday) | ------------------------------ | 1977-09-01 | 1974-06-03 | ------------------------------32、多段排序 以 class 和 birthday 从大到小的顺序查询 student 表。 SELECT * FROM student ORDER BY class DESC, birthday; ---------------------------------------- | no | name | sex | birthday | class | ---------------------------------------- | 110 | 张飞 | 男 | 1974-06-03 | 95038 | | 103 | 王丽 | 女 | 1976-01-23 | 95033 | | 104 | 李军 | 男 | 1976-02-20 | 95033 | | 107 | 王尼玛 | 男 | 1976-02-20 | 95033 | | 101 | 曾华 | 男 | 1977-09-01 | 95033 | | 106 | 陆军 | 男 | 1974-06-03 | 95031 | | 109 | 赵铁柱 | 男 | 1974-06-03 | 95031 | | 105 | 王芳 | 女 | 1975-02-10 | 95031 | | 108 | 张全蛋 | 男 | 1975-02-10 | 95031 | | 102 | 匡明 | 男 | 1975-10-02 | 95031 | ----------------------------------------33、子查询 - 5 查询 “男” 教师及其所上的课程。 先从教师表中找教师再把查询结果作为课程表的查询依据 SELECT * FROM course WHERE t_no in (SELECT no FROM teacher WHERE sex 男); --------------------------- | no | name | t_no | --------------------------- | 3-245 | 操作系统 | 804 | | 6-166 | 数字电路 | 856 | ---------------------------34、MAX 函数与子查询 查询最高分同学的 score 表。 -- 找出最高成绩该查询只能有一个结果 SELECT MAX(degree) FROM score; -- 根据上面的条件筛选出所有最高成绩表 -- 该查询可能有多个结果假设 degree 值多次符合条件。 SELECT * FROM score WHERE degree (SELECT MAX(degree) FROM score); --------------------- | s_no | c_no | degree | --------------------- | 103 | 3-105 | 92 | ---------------------35、子查询 - 6 查询和 “李军” 同性别的所有同学 name 。 -- 首先将李军的性别作为条件取出来 SELECT sex FROM student WHERE name 李军; ----- | sex | ----- | 男 | ----- -- 根据性别查询 name 和 sex SELECT name, sex FROM student WHERE sex (SELECT sex FROM student WHERE name 李军 ); ---------------- | name | sex | ---------------- | 曾华 | 男 | | 匡明 | 男 | | 李军 | 男 | | 陆军 | 男 | | 王尼玛 | 男 | | 张全蛋 | 男 | | 赵铁柱 | 男 | | 张飞 | 男 | ----------------36、子查询 - 7 查询和 李军 同性别且同班的同学 name 。 SELECT name, sex, class FROM student WHERE sex (SELECT sex FROM student WHERE name 李军 ) AND class (SELECT class FROM student WHERE name 李军 ); ----------------------- | name | sex | class | ----------------------- | 曾华 | 男 | 95033 | | 李军 | 男 | 95033 | | 王尼玛 | 男 | 95033 | -----------------------37、子查询 - 8 查询所有选修 “计算机导论” 课程的 “男” 同学成绩表。 需要的 “计算机导论” 和性别为 “男” 的编号可以在 course 和 student 表中找到。 SELECT * FROM score WHERE c_no (SELECT no FROM course WHERE name 计算机导论 ) AND s_no IN (SELECT no FROM student WHERE sex 男 ); --------------------- | s_no | c_no | degree | --------------------- | 101 | 3-105 | 90 | | 102 | 3-105 | 91 | | 104 | 3-105 | 89 | | 109 | 3-105 | 76 | ---------------------38、按等级查询 建立一个 grade 表代表学生的成绩等级并插入数据 CREATE TABLE grade (low INT(3),upp INT(3),grade char(1) );INSERT INTO grade VALUES (90, 100, A); INSERT INTO grade VALUES (80, 89, B); INSERT INTO grade VALUES (70, 79, C); INSERT INTO grade VALUES (60, 69, D); INSERT INTO grade VALUES (0, 59, E);SELECT * FROM grade; ------------------- | low | upp | grade | ------------------- | 90 | 100 | A | | 80 | 89 | B | | 70 | 79 | C | | 60 | 69 | D | | 0 | 59 | E | -------------------2、查询所有学生的 s_no 、c_no 和 grade 列。 思路是使用区间 ( BETWEEN ) 查询判断学生的成绩 ( degree ) 在 grade 表的 low 和 upp 之间。 SELECT s_no, c_no, grade FROM score, grade WHERE degree BETWEEN low AND upp; -------------------- | s_no | c_no | grade | -------------------- | 101 | 3-105 | A | | 102 | 3-105 | A | | 103 | 3-105 | A | | 103 | 3-245 | B | | 103 | 6-166 | B | | 104 | 3-105 | B | | 105 | 3-105 | B | | 105 | 3-245 | C | | 105 | 6-166 | C | | 109 | 3-105 | C | | 109 | 3-245 | D | | 109 | 6-166 | B | --------------------参考 一天学会MySQL 某Github
http://www.lebaoying.cn/news/68781.html

相关文章:

  • saas电商建站系统大学 两学一做专题网站
  • 做网站后台用什么写wordpress stats view counter
  • 17做网站官网网站建设行业产业链分析
  • 国外营销型网站设计景泰做网站
  • 北京百度糯米团购有做网站的电话吗阿里云网站建设教程视频
  • 书写网站建设策划书56物流网
  • 世界工厂采购网站php网站开发结构说明
  • 网站开发后端框架wordpress 速度
  • 泉州网站建设+推广技术支持 东莞网站建设 轴承
  • 企业搭建一个营销型网站多少钱建站哪个便宜
  • 怎么样评价网站做的好坏网站设置黑白色
  • 哪些网站可以做签约设计师亚马逊a+页面模板
  • 西安网站优化招聘织梦后台发布了网站没显示
  • 烟台网站排名seo网站怎么建
  • 网站服务器是指什么做网站用什么环境
  • 专业的建设机械网站谁用腾讯风铃做网站的
  • 没域名 打开网站温州网站制作设计
  • 用rp怎么做网站按钮下拉框如何备案域名
  • 如何给网站做dns解析建设银行网站用户名忘了怎么办
  • 自己买主机可以做网站吗如何用代码制作网站
  • 网站文件服务器南漳网页设计
  • 创建网站代码是什么网页设计与制作大赛
  • 做照片用的视频模板下载网站好定制app开发平台
  • 网站建设与运营及营销服务汽车网站模板下载
  • Wordpress博客欣赏seo排名优化方式
  • dw旅游网站设计教程阳江吧
  • 可以做婚礼视频的网站健康义乌app
  • 网站设计与制视频网站闪图怎么做
  • 门户网站对应序号是什么网页打不开connection
  • 北京加盟网站建设免费学做网站