MySQL 数据查询
- SELECT子句:用来指定查询返回字段,星号(*)表示返回所有字段
SELECT [DISTINCT]*|字段列表 #DISTINCT 用来过滤重复数据
- FROM子句:用来指定数据来源的表
FROM <表名>
- WHERE子句:用来定义查询返回数据的条件
WHERE 查询条件
- GROUP BY子句:用来指定查询结果的分组条件
GROUP BY 分组字段 [HAVING 分组条件]
- ORDER BY子句:用来给指定字段排序,ASC(升序)可省略,DESC(降序)
ORDER BY 排序字段 [ASC|DESC] #ASC 为升序|DESC为降序
- LIMIT子句:用来限制select语句返回的记录数
LIMIT [初始位置],记录数
举例说明:
以student、course、score三张表示范, 三张表的创建语句如下
- --
- -- Database: stuInfo
- --
- CREATE DATABASE stuInfo
- DEFAULT CHARACTER SET utf8;
- USE stuInfo;
- --
- -- 表的结构 student /*学生表*/
- --
- CREATE TABLE student (
- sNo CHAR(10) NOT NULL COMMENT '学号',
- sName VARCHAR(20) NOT NULL COMMENT '姓名',
- sex CHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
- birthday DATE NOT NULL COMMENT '出生日期',
- deptName VARCHAR(30) NOT NULL COMMENT '所属班级',
- remark VARCHAR(80) COMMENT '备注',
- PRIMARY KEY (sNo), /*设置sNo为主键*/
- INDEX (sName) /*设置sName为普通索引*/
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- --
- -- 转存表中的数据 student
- --
- INSERT INTO student (sNo, sName, sex, birthday, deptName, remark) VALUES
- ('', '陈斌', '男', '1993-03-20', '软件131', ''),
- ('', '张洁', '女', '1996-02-08', '软件131', ''),
- ('', '郑先超', '男', '1994-04-25', '软件131', ''),
- ('', '徐孝兵', '男', '1994-08-06', '软件131', ''),
- ('', '王群', '女', '1995-03-27', '软件131', ''),
- ('', '刘威', '男', '1994-07-13', '网络131', ''),
- ('', '沈雁斌', '男', '1994-05-28', '网络131', ''),
- ('', '杨群', '女', '1995-10-18', '网络131', ''),
- ('', '蒋维维', '男', '1994-10-19', '网络131', ''),
- ('', '杨璐', '女', '1995-09-26', '网络131', ''),
- ('', '王林林', '男', '1994-04-16', '机电131', ''),
- ('', '杨一超', '男', '1994-08-27', '机电131', ''),
- ('', '张伟', '男', '1995-01-03', '机电131', ''),
- ('', '田翠萍', '女', '1994-10-20', '机电131', ''),
- ('', '周伟', '男', '1995-09-10', '机电131', '');
- --
- -- 表的结构 course /*课程表*/
- --
- CREATE TABLE course (
- cNo CHAR(5) NOT NULL COMMENT '课程编号',
- cName VARCHAR(30) NOT NULL COMMENT '课程名称',
- credit TINYINT UNSIGNED COMMENT '学分',
- remark VARCHAR(100) COMMENT '备注',
- PRIMARY KEY (cNo), /*设置cNo为主键*/
- UNIQUE (cName) /*设置cName为唯一索引*/
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- --
- -- 转存表中的数据 course
- --
- INSERT INTO course (cNo, cName, credit, remark) VALUES
- ('', 'C语言程序设计', 5, '计算机类专业课程'),
- ('', '数据结构', 4, '计算机类专业课程'),
- ('', 'Java程序设计', 4, '计算机类专业课程'),
- ('', '网络基础', 3, '计算机类专业课程'),
- ('', '数据库原理及应用', 4, '计算机类专业课程'),
- ('', '操作系统', 4, '计算机类专业课程'),
- ('', '机械设计基础', 5, NULL),
- ('', '机械制造基础', 4, NULL),
- ('', '机械制图', 4, NULL);
- --
- -- 表的结构 score /*成绩表*/
- --
- CREATE TABLE score (
- sNo CHAR(10) NOT NULL COMMENT '学号',
- cNo CHAR(5) NOT NULL COMMENT '课程编号',
- grade TINYINT UNSIGNED NOT NULL COMMENT '成绩',
- PRIMARY KEY(sNo, cNo), /*设置sNo和cNo为复合主键*/
- FOREIGN KEY(sNo) REFERENCES student(sNo) /*与学生表关联*/
- ON UPDATE NO ACTION ON DELETE NO ACTION,
- FOREIGN KEY(cNo) REFERENCES course(cNo) /*与课程表关联*/
- ON UPDATE NO ACTION ON DELETE NO ACTION
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- --
- -- 转存表中的数据 score
- --
- INSERT INTO score (sNo, cNo, grade) VALUES
- ('', '', 72),
- ('', '', 56),
- ('', '', 77),
- ('', '', 85),
- ('', '', 73),
- ('', '', 90),
- ('', '', 79),
- ('', '', 82),
- ('', '', 63),
- ('', '', 84),
- ('', '', 92),
- ('', '', 71),
- ('', '', 87),
- ('', '', 90),
- ('', '', 95);
三张表的创建
查询语句如下:
- -- 查询学生表的所有字段
- SELECT * from student;
- -- 查询学生表的学号,姓名,性别字段
- SELECT sNo,sName,sex from student;
- -- 查询查询学生表的学号,姓名,性别字段,并用 as 定义字段别名
- SELECT sNo as '学号',sName as '姓名',sex as '性别' FROM student;
- -- 查询学生表的所有女生信息
- SELECT *from student WHERE sex='女';
- -- 查询课程表中学分大于4的课程所有信息
- SELECT *FROM course WHERE credit>4;
- -- 查询学生表中在1995年出生的学生信息
- select *FROM student where birthday>='1995-1-1' AND birthday<='1995-12-31';
- -- 查询学生表中姓杨的信息
- SELECT *FROM student where sName LIKE '杨%';
- -- 查询学生表中姓杨的姓名为两个字的学生信息
- SELECT *FROM student where sName LIKE '杨_';
- -- 查询学生表中姓杨的姓名为三个字的学生信息
- SELECT *FROM student where sName LIKE '杨__';
- -- 查询学生表中姓名的第二个字为伟和先的同学信息
- select *FROM student where sName LIKE '_伟%' OR sName LIKE '_先%';
- -- 查询学生表中在1995年出生的学生信息
- SELECT *FROM student where birthday BETWEEN '1995-1-1' AND '1995-12-31';
- -- 查询成绩表中成绩在60到89之间的信息
- SELECT *FROM score WHERE grade BETWEEN 60 and 89;
- -- 查询学生表学号为 1308013101,1309122503,1312054904 的学生信息
- SELECT *FROM student WHERE sNo in('','','');
- -- 查询课程表中标记为空的信息
- SELECT *FROM course where remark is NULL;
- -- 查询学生表中男生的信息并按生日降序排序
- SELECT *FROM student WHERE sex='男' ORDER BY birthday DESC;
- -- 查询学生表所有信息并按性别降序,学号升序排列
- SELECT *FROM student ORDER BY sex DESC,sNo;
- -- 查询学生表信息并按生日降序,取前五个记录
- SELECT *FROM student ORDER BY birthday DESC
- LIMIT 5;
- -- 查询成绩表中当课程号为01001的学号,课程号,成绩信息,并以成绩降序排列
- SELECT sNo,cNo,grade FROM score WHERE cNo='' ORDER BY grade DESC
- LIMIT 1,3;
- -- 查询成绩表中选修的学号 并用DISTINCT去重
- SELECT DISTINCT sNo FROM score;
- -- 用内连接 INNER JOIN 来查询信息
- SELECT student.sNo,sName,sex,cNo,grade FROM student inner JOIN score ON student.sNo=score.sNo
- where sex='女';
- SELECT student.sNo,sName,sex,cNo,grade FROM student,score where student.sNo=score.sNo and sex='女';
- -- 查询学号为1308013101 的信息
- select S.sNo,sName,sex,C.cNo,cName,grade FROM student S INNER JOIN score G ON S.sNo=G.sNo
- INNER JOIN course C on C.cNo=G.cNo
- where S.sNo='';
- SELECT S.sNo,sName,sex,C.cNo,cName,grade from student S ,course C,score G
- where S.sNo=G.sNo and G.cNo=C.cNo and S.sNo='';
- -- 查询学号为1308013101的最高分,最低分及平均分和总分信息
- SELECT max(grade) as '最高分',min(grade) as '最低分' ,avg(grade) as '平均分',sum(grade) as '总分' FROM score WHERE sNo='' ;
- -- 查询学生表男生人数
- SELECT count(*) as '男生人数' from student where sex='男';
- -- 查询成绩表中已选修课程的人数并用DISTINCT去重
- select count(DISTINCT sNo)as '已选修课程学生人数' from score;
- -- 分组统计男、女生人数
- SELECT sex as '性别',count(*) as '学生人数' from student GROUP BY sex;
- -- 分组统计不同班级人数
- SELECT deptName AS '班级',count(*) as '学生人数' from student GROUP BY deptName;
- -- 5分组查询学生的学号、姓名、选修课程数及平均分
- SELECT student.sNo as '学号',sName as '姓名', count(*)as '选修课程数',avg(grade) as '平均分' from score INNER JOIN student on score.sNo=student.sNo
- GROUP BY student.sNo;
- -- 用嵌套查询学号为1308013101的同学在同一个班级的学生信息
- SELECT *FROM student where deptName=(SELECT deptName from student where sNo='');
- -- 查询课程编号为01001的课程,且成绩超过该课程平均分的学生的学号、姓名、所属班级、课程编号、课程名称及成绩
- select student.sNo,sName,deptName,course.cNo,cName,grade FROM student,score,course
- where student.sNo=score.sNo and score.cNo=course.cNo
- AND course.cNo=''and grade>(SELECT avg(grade)FROM score,course
- where course.cNo=score.cNo and course.cNo='');
- -- 创建新数据表,查询网络131的学生记录,将查询结果插入到新数据表中
- CREATE TABLE tempStudent(
- stuNo char(10) not null PRIMARY KEY,
- StuName VARCHAR(20)not NULL,
- sex char(1),
- deptName varchar(30) not null
- );
- INSERT into tempStudent(stuNo,stuName,sex,deptName)
- SELECT sNo,sName,sex,deptName from student where deptName='网络131';
- -- 将数据结构 课程成绩统一减去5
- update score SET grade=grade-5
- where cNo=(SELECT cNO from course WHERE cName='数据结构');
- -- 查询更新完的成绩表
- select *from score where cNo=(SELECT cNO from course WHERE cName='数据结构');
- -- 删除机电131的学生的成绩记录
- delete from score
- where sNo in (SELECT sNo from student where deptName='机电131');
- -- 查询 删除后的机电131成绩记录
- SELECT *from score where sNo in (SELECT sNo from student where deptName='机电131');
MySQL 数据查询的更多相关文章
- nodejs mysql 数据查询例子
1.安装nodejs 2.安装mysql npm包 地址:https://github.com/felixge/node-mysql npm install mysql 3.相应API查看及调用: ...
- MySQL数据查询之单表查询
单表查询 简单查询 - 创建表 DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` ) NOT NULL AUTO_INCREMEN ...
- mysql 数据查询全讲
数据查询 涉及到DQL(Data Query Language)是sql语句的一类 本文全面介绍了mysql下 select 语句的各种查询方式:普通查询,模糊查询,查询排序,分页查询,聚合函数查询 ...
- MySQL - 数据查询 - 简单查询
1. 简述 查询数据是指从数据库中获取所需要的数据.如Jack 要达到验证用户名和密码的目的,就需要从数据库已保存的用户表中读取当前用户的密码进行验证,以验明正身!保存查询数据是数据库操作中常用且重要 ...
- 【初学python】使用python连接mysql数据查询结果并显示
因为测试工作经常需要与后台数据库进行数据比较和统计,所以采用python编写连接数据库脚本方便测试,提高工作效率,脚本如下(python连接mysql需要引入第三方库MySQLdb,百度下载安装) # ...
- Packets larger than max_allowed_packet are not allowed(mysql数据查询提示:不允许超过允许的最大数据包)解决方案
问题背景: 首先我的项目运用的时Mysql,在做一个数据更新操作的时候,提示异常:System.Exception:“ExecuteNonQuery:Packets larger than max_a ...
- MySQL数据查询
数据查询语言DQL select [all | distinct] 字段或表达式列表 [from子句] [where子句] [group by子句] [having子句] [order by子句] [ ...
- MySQL数据查询之多表查询
多表查询 多表联合查询 #创建部门 CREATE TABLE IF NOT EXISTS dept ( did int not null auto_increment PRIMARY KEY, dna ...
- MySql数据查询的逻辑蕴含条件问题
SQL语言中没有蕴含逻辑运算.但是,可以利用谓词演算将一个逻辑蕴含的谓词等价转换为:p->q ≡┐p∨q. 我们通过一个具体的题目来分析:(具体的表和数据详见文章:Mysql数据库中的EXIST ...
- 笔记-4:mysql数据查询
1.创建查询表 1.1 创建班级表 含义 字段名 数据类型 宽度 班级编号 classNo 字符型 6 班级名称 className 字符型 20 所属院系 department 字符型 30 年级 ...
随机推荐
- .NET Core实战项目之CMS 第十四章 开发篇-防止跨站请求伪造(XSRF/CSRF)攻击处理
通过 ASP.NET Core,开发者可轻松配置和管理其应用的安全性. ASP.NET Core 中包含管理身份验证.授权.数据保护.SSL 强制.应用机密.请求防伪保护及 CORS 管理等等安全方面 ...
- 并发编程(九)—— Java 并发队列 BlockingQueue 实现之 LinkedBlockingQueue 源码分析
LinkedBlockingQueue 在看源码之前,通过查询API发现对LinkedBlockingQueue特点的简单介绍: 1.LinkedBlockingQueue是一个由链表实现的有界队列阻 ...
- 并发编程(一)—— volatile关键字和 atomic包
本文将讲解volatile关键字和 atomic包,为什么放到一起讲呢,主要是因为这两个可以解决并发编程中的原子性.可见性.有序性,让我们一起来看看吧. Java内存模型 JMM(java内存模型) ...
- 关于HotSpot VM以及Java语言的动态编译 你可能想知道这些
目录 1 HotSpot VM的历史 2 HotSpot VM 概述 2.1 编译器 2.2 解释器 2.3 解释型语言 VS 编译型语言 3 动态编译 3.1 什么是动态编译 3.2 HotSpot ...
- 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记(3)- 串口功能实现(pySerial)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串口调试工具Jays-PyCOM诞生之串口功能实现. 串口调试助手是最核心的当然是串口数据收发与显示的功能,Jays-PyCOM借助的是 ...
- Docker公共&本地镜像仓库(七)--技术流ken
分发镜像 我们已经会构建自己的镜像了,那么如果在多个docker主机上使用镜像那?有如下的几种可用的方法: 用相同的Dockerfile在其他host上构建镜像 将镜像上传到公共registry(比如 ...
- Haskell复习笔记(二)
Haskell中的递归 递归就是定义函数以调用自身的方式,关于递归解决问题的实例有很多,如斐波那契数列,还有汉诺塔问题,递归也正是Haskell中用来解决循环问题的关键. 自定义maxinum函数 m ...
- Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(一)
环境 本地 win7 服务器:Virtual Box 上的Centos ssh工具: Xshell 文件传输: xftp 1.在本地创建asp.net core应用发布 1.1 使用Vs2017 新建 ...
- windows下Jmeter压力测试工具的安装
JMeter是Apache软件基金会的产品,用于对静态的和动态的资源(文件,Servlet,Perl脚本,Java 对象,数据库和查询,FTP服务器等等)的性能进行测试.是一款很方便的测试软件. 系统 ...
- Android破解学习之路(十)—— 我们恋爱吧 三色绘恋 二次破解
前言 好久没有写破解教程了(我不会告诉你我太懒了),找到一款恋爱游戏,像我这样的宅男只能玩玩恋爱游戏感觉一下恋爱的心动了.. 这款游戏免费试玩,但是后续章节得花6元钱购买,我怎么会有钱呢,而且身在吾爱 ...