sql语句分组/排序/计算总数/连接等sql语句书写
1.什么是表连接?
答:比如两张表,要获取的信息来自两张表,就需要通过外键的形式进行两张表的连接。最后产后组合信息。
表连接是通过join连接的。表连接说白了就是产生一个大表。表连接也都是用于查询上的,用户查询获得多种信息。
2.什么情况下用到分组?
答:涉及到每个“xxx字段”时,就是典型分组,要用group by xxx字段。
分组时,基本都要显示分组的字段,这样才能区分是哪个被分组的字段有什么数据。
比如从student表中查询每个院系有多少人
mysql> SELECT department, COUNT(id) FROM student GROUP BY department;
select 显示的字段要有department,按department GROUP BY ,所以group by后面也有department
分组与表连接没有任何关系,表连接说白了就是产生一个大表。
3.mysql中常用的数学函数?
答:count(xx字段),计算总数量。比如计算院系有多少人。
max(xx字段),计算最大值,比如计算每个科目的最高分
8.从student表中查询每个院系有多少人
mysql> SELECT department, COUNT(id) FROM student GROUP BY department;
+------------+-----------+
| department | COUNT(id) |
+------------+-----------+
| 计算机系 | 2 |
| 英语系 | 2 |
| 中文系 | 2 |
+------------+-----------+
9.从score表中查询每个科目的最高分
mysql> SELECT c_name,MAX(grade) FROM score GROUP BY c_name;
+--------+------------+
| c_name | MAX(grade) |
+--------+------------+
| 计算机 | 98 |
| 英语 | 94 |
| 中文 | 95 |
+--------+------------+
10.查询李四的考试科目(c_name)和考试成绩(grade)
mysql> SELECT c_name, grade
-> FROM score WHERE stu_id=
-> (SELECT id FROM student
-> WHERE name= '李四' );
+--------+-------+
| c_name | grade |
+--------+-------+
| 计算机 | 70 |
| 英语 | 92 |
+--------+-------+
11.用连接的方式查询所有学生的信息和考试信息
mysql> SELECT student.id,name,sex,birth,department,address,c_name,grade
-> FROM student,score
-> WHERE student.id=score.stu_id;
+-----+--------+------+-------+------------+--------------+--------+-------+
| id | name | sex | birth | department | address | c_name | grade |
+-----+--------+------+-------+------------+--------------+--------+-------+
| 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 | 计算机 | 98 |
| 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 | 英语 | 80 |
| 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 | 计算机 | 65 |
| 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 | 中文 | 88 |
| 903 | 张三 | 女 | 1990 | 中文系 | 湖南省永州市 | 中文 | 95 |
| 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省阜新市 | 计算机 | 70 |
| 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省阜新市 | 英语 | 92 |
| 905 | 王五 | 女 | 1991 | 英语系 | 福建省厦门市 | 英语 | 94 |
| 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 | 计算机 | 90 |
| 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 | 英语 | 85 |
+-----+--------+------+-------+------------+--------------+--------+-------+
12.计算每个学生的总成绩
mysql> SELECT student.id,name,SUM(grade) FROM student,score
-> WHERE student.id=score.stu_id
-> GROUP BY id;
+-----+--------+------------+
| id | name | SUM(grade) |
+-----+--------+------------+
| 901 | 张老大 | 178 |
| 902 | 张老二 | 153 |
| 903 | 张三 | 95 |
| 904 | 李四 | 162 |
| 905 | 王五 | 94 |
| 906 | 王六 | 175 |
+-----+--------+------------+
13.计算每个考试科目的平均成绩
mysql> SELECT c_name,AVG(grade) FROM score GROUP BY c_name;
+--------+------------+
| c_name | AVG(grade) |
+--------+------------+
| 计算机 | 80.7500 |
| 英语 | 87.7500 |
| 中文 | 91.5000 |
+--------+------------+
14.查询计算机成绩低于95的学生信息
mysql> SELECT * FROM student
-> WHERE id IN
-> (SELECT stu_id FROM score
-> WHERE c_name="计算机" and grade<95);
+-----+--------+------+-------+------------+--------------+
| id | name | sex | birth | department | address |
+-----+--------+------+-------+------------+--------------+
| 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 |
| 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省阜新市 |
| 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 |
15.查询同时参加计算机和英语考试的学生的信息
mysql> SELECT * FROM student
-> WHERE id =ANY
-> ( SELECT stu_id FROM score
-> WHERE stu_id IN (
-> SELECT stu_id FROM
-> score WHERE c_name= '计算机')
-> AND c_name= '英语' );
+-----+--------+------+-------+------------+--------------+
| id | name | sex | birth | department | address |
+-----+--------+------+-------+------------+--------------+
| 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 |
| 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省阜新市 |
| 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 |
+-----+--------+------+-------+------------+--------------+
mysql> SELECT a.* FROM student a ,score b ,score c
-> WHERE a.id=b.stu_id
-> AND b.c_name='计算机'
-> AND a.id=c.stu_id
-> AND c.c_name='英语';
+-----+--------+------+-------+------------+--------------+
| id | name | sex | birth | department | address |
+-----+--------+------+-------+------------+--------------+
| 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 |
| 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省阜新市 |
| 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 |
+-----+--------+------+-------+------------+--------------+
16.将计算机考试成绩按从高到低进行排序
mysql> SELECT stu_id, grade
-> FROM score WHERE c_name= '计算机'
-> ORDER BY grade DESC;
+--------+-------+
| stu_id | grade |
+--------+-------+
| 901 | 98 |
| 906 | 90 |
| 904 | 70 |
| 902 | 65 |
+--------+-------+
17.从student表和score表中查询出学生的学号,然后合并查询结果
mysql> SELECT id FROM student
-> UNION
-> SELECT stu_id FROM score;
+-----+
| id |
+-----+
| 901 |
| 902 |
| 903 |
| 904 |
| 905 |
| 906 |
+-----+
18.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩
mysql> SELECT student.id, name,sex,birth,department, address, c_name,grade
-> FROM student, score
-> WHERE
-> (name LIKE '张%' OR name LIKE '王%')
-> AND
-> student.id=score.stu_id ;
+-----+--------+------+-------+------------+--------------+--------+-------+
| id | name | sex | birth | department | address | c_name | grade |
+-----+--------+------+-------+------------+--------------+--------+-------+
| 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 | 计算机 | 98 |
| 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 | 英语 | 80 |
| 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 | 计算机 | 65 |
| 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 | 中文 | 88 |
| 903 | 张三 | 女 | 1990 | 中文系 | 湖南省永州市 | 中文 | 95 |
| 905 | 王五 | 女 | 1991 | 英语系 | 福建省厦门市 | 英语 | 94 |
| 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 | 计算机 | 90 |
| 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 | 英语 | 85 |
+-----+--------+------+-------+------------+--------------+--------+-------+
19.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩
mysql> SELECT student.id, name,sex,birth,department, address, c_name,grade
-> FROM student, score
-> WHERE address LIKE '湖南%' AND
-> student.id=score.stu_id;
+-----+------+------+-------+------------+--------------+--------+-------+
| id | name | sex | birth | department | address | c_name | grade |
+-----+------+------+-------+------------+--------------+--------+-------+
| 903 | 张三 | 女 | 1990 | 中文系 | 湖南省永州市 | 中文 | 95 |
| 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 | 计算机 | 90 |
| 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 | 英语 | 85 |
+-----+------+------+-------+------------+--------------+--------+-------+
sql语句分组/排序/计算总数/连接等sql语句书写的更多相关文章
- SQL语句分组排序,多表关联排序
SQL语句分组排序,多表关联排序总结几种常见的方法: 案例一: 在查询结果中按人数降序排列,若人数相同,则按课程号升序排列? 分析:单个表内的多个字段排序,一般可以直接用逗号分割实现. select ...
- 一条Sql语句分组排序并且限制显示的数据条数
如果我想得到这样一个结果集:分组排序,并且每组限定记录集的数量,用一条SQL语句能办到吗? 比如说,我想找出学生期末考试中,每科的前3名,并按成绩排序,只用一条SQL语句,该怎么写? 表[TScore ...
- SQL之分组排序取top n
转自:http://blog.csdn.net/wguangliang/article/details/50167283 要求:按照课程分组,查找每个课程最高的两个成绩. 数据文件如下: 第一列no为 ...
- Sql sever 分组排序
维护人事的时候人事局要求加入一个新功能,详细需求例如以下:加入的人员在同一个单位的依照顺序编号而且单位也要实现时间排序,也就是说有两个排序,第一单位名称排序.先创建的一直在前.然后依照创建时间依次排序 ...
- sql server 分组排序
环境: sql server 2012 语法 select ROW_NUMBER() over(partition BY 分组字段 order by 排序字段),* as rowNums from 表 ...
- sql 坐标距离排序计算距离(转)
如果两个坐标的列是(x1,y1).(x2,y2),那么他们之间的距离:SQRT((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2)) sql排序 SELECT * FROM m_store ...
- 【转载】Sqlserver使用Group By进行分组并计算每个组的数量
在SQL语句查询中,Group By语句时常用来进行分组操作,有时候在分组的同时还需要计算出每个组的数量多少.在Sqlserver数据库中可以使用Group By加Count聚合函数来实现此功能,即通 ...
- Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决
Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决 I. 概述 1.1 JDBC概念 JDBC(Java Database Connectivity ...
- mysql分组排序加序号(不用存储过程,就简简单单sql语句哦)
做前端好长时间了,好久没动sql了.在追一个喜欢的女孩,做测试的,有这么个需求求助与本屌丝,机会难得,开始折腾起来,配置mysql,建库,建表.... 一 建表 CREATE TABLE `my_te ...
随机推荐
- jquery获取浏览器宽高
满足获取各种高的需求 $(document).ready(function() { alert($(window).height()); //浏览器时下窗口可视区域高度 alert($(documen ...
- 【LOJ】#2244. 「NOI2014」起床困难综合症
题解 写水题放松一下心情 二进制有个很好的性质是每一位是独立的,我们按位贪心,先看这一位能不能填1,然后看看如果这一位填0那么运算后最后这一位是不是1,是的话就退出,然后看看这一位如果填1最后是1这一 ...
- forms.ModelForm 与 forms.Form
1. 首先 两者都是forms里的常用类. 2. 这两个类在应用上是有区别的.一般情况下,如果要将表单中的数据写入数据库或者修改某些记录的值,就要让表单类继承ModelForm; 如果提交表单后 不会 ...
- Ionic Js十九:加载动画
ion-spinner ionSpinner 提供了许多种旋转加载的动画图标.当你的界面加载时,你就可以呈现给用户相应的加载图标. 该图标采用的是SVG.  实例 HTML 代码 <ion-c ...
- vue.js 是如何做到数据响应的
许多前端JavaScript框架(例如Angular,React和Vue)都有自己的数据相应引擎.通过了解相应性及其工作原理,您可以提高开发技能并更有效地使用JavaScript框架.在视频和下面的文 ...
- GOF设计模式快速学习
这段时间,学习状态比较一般,空闲时基本都在打游戏,和研究如何打好游戏,终于通过戏命师烬制霸LOL,玩笑了.为了和"学习"之间的友谊小船不翻,决定对以往学习过的GOF设计模式做一个简 ...
- <泛> 归并排序 及 逆序对
今天写一个归并排序的模板,返回值为该序列的逆序对数 基本思路 归并排序就是利用二分的思想,将区间无限递归二分,直到当前划分区间只包含一个元素或没有元素的时候(我们认为这个序列是自动有序的),我们回溯到 ...
- 在qemu环境中用gdb调试Linux内核
简介 对用户态进程,利用gdb调试代码是很方便的手段.而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试.其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qem ...
- Here is a 10-line template that can solve most 'substring' problems子字符串问题的模板
转载自leetcode评论区:https://discuss.leetcode.com/topic/30941/here-is-a-10-line-template-that-can-solve-mo ...
- 安装部署VMware vSphere 5.5文档 (6-3) 安装配置AD域控制器
部署VMware vSphere 5.5 实施文档 ########################################################################## ...