1、创建表的结构和数据
CREATE TABLE `t_student`(
`id` INT PRIMARY KEY,
`stuName` VARCHAR(10) NOT NULL,
`age` INT NOT NULL,
`sex` VARCHAR (4),
`gradeName` VARCHAR(10) NOT NULL
);
插入数据:
INSERT INTO `t_student`
(`id`,`stuName`,`age`,`sex`,`gradeName`)
VALUES
('1','张三','23','男','一年级')
('2','麻子','25','男','二年级'),
('3','李四','22','男','一年级'),
('4','王五','23','男','三年级'),
('5','小龙女','21','女','一年级'),
('6','周芷若','26','女','二年级'),
('7','汪峰','20','男','三年级'),
('8','黄欧阳锋','21','男','二年级'),
('9','杨过','22','男','二年级'),
('10','令狐冲','19','男','三年级'),
('11','东方不败','25','男','一年级'),
('12','无崖子','30',NULL,'一年级'),
('13','连城诀','28',NULL,'一年级');
2.单表查询
查询所有字段
SELECT 字段1,字段2,字段3.......FROM 表名;
SELECT id,stuName,age,sex,gradeName FROM t_student;
SELECT * FROM t_student;
两者区别在于前者可以通过查询字段的顺序来调整显示结果的顺序,后者是按照表结构的顺序显示。
where条件查询
SELECT 字段1,字段2,字段3......FROM 表名;
SELECT age,sex,gradeName FROM t_student WHERE 条件表达式;
查询编号为1的学生:
SELECT * FROM t_student WHERE id=1;
mysql> SELECT * FROM t_student WHERE id=1;
+----+---------+-----+------+-----------+
| id | stuName | age | sex | gradeName |
+----+---------+-----+------+-----------+
| 1 | 张三 | 23 | 男 | 一年级 |
+----+---------+-----+------+-----------+
1 row in set (0.00 sec)
查询年龄大于22岁的学生:
SELECT * FROM t_student WHERE age >22;
mysql> SELECT * FROM t_student WHERE age >22;
+----+--------------+-----+------+-----------+
| id | stuName | age | sex | gradeName |
+----+--------------+-----+------+-----------+
| 1 | 张三 | 23 | 男 | 一年级 |
| 2 | 麻子 | 25 | 男 | 二年级 |
| 4 | 王五 | 23 | 男 | 三年级 |
| 6 | 周芷若 | 26 | 女 | 二年级 |
| 10 | 令狐冲 | 23 | 男 | 三年级 |
| 11 | 东方不败 | 23 | 男 | 一年级 |
| 12 | 无崖子 | 23 | NULL | 一年级 |
| 13 | 连城诀 | 23 | NULL | 一年级 |
+----+--------------+-----+------+-----------+
8 rows in set (0.00 sec)
查询性别为男的学生:
SELECT * FROM t_student WHERE sex='男';
mysql> SELECT * FROM t_student WHERE sex='男';
+----+--------------+-----+------+-----------+
| id | stuName | age | sex | gradeName |
+----+--------------+-----+------+-----------+
| 1 | 张三 | 23 | 男 | 一年级 |
| 2 | 麻子 | 25 | 男 | 二年级 |
| 3 | 李四 | 22 | 男 | 一年级 |
| 4 | 王五 | 23 | 男 | 三年级 |
| 7 | 汪峰 | 20 | 男 | 三年级 |
| 8 | 黄欧阳锋 | 21 | 男 | 二年级 |
| 9 | 杨过 | 22 | 男 | 二年级 |
| 10 | 令狐冲 | 23 | 男 | 三年级 |
| 11 | 东方不败 | 23 | 男 | 一年级 |
+----+--------------+-----+------+-----------+
9 rows in set (0.00 sec)
带IN关键字的查询
查询年龄为22或者23岁的学生:
SELECT * FROM t_student WHERE age IN (22,23);
mysql> SELECT * FROM t_student WHERE age IN (22,23);
+----+--------------+-----+------+-----------+
| id | stuName | age | sex | gradeName |
+----+--------------+-----+------+-----------+
| 1 | 张三 | 23 | 男 | 一年级 |
| 3 | 李四 | 22 | 男 | 一年级 |
| 4 | 王五 | 23 | 男 | 三年级 |
| 9 | 杨过 | 22 | 男 | 二年级 |
| 10 | 令狐冲 | 23 | 男 | 三年级 |
| 11 | 东方不败 | 23 | 男 | 一年级 |
| 12 | 无崖子 | 23 | NULL | 一年级 |
| 13 | 连城诀 | 23 | NULL | 一年级 |
+----+--------------+-----+------+-----------+
8 rows in set (0.00 sec)
查询学号不是1和9 的学生记录:
SELECT * FROM t_student WHERE ID NOT IN (1,9);
mysql> SELECT * FROM t_student WHERE ID NOT IN (1,9);
+----+--------------+-----+------+-----------+
| id | stuName | age | sex | gradeName |
+----+--------------+-----+------+-----------+
| 2 | 麻子 | 25 | 男 | 二年级 |
| 3 | 李四 | 22 | 男 | 一年级 |
| 4 | 王五 | 23 | 男 | 三年级 |
| 5 | 小龙女 | 21 | 女 | 一年级 |
| 6 | 周芷若 | 26 | 女 | 二年级 |
| 7 | 汪峰 | 20 | 男 | 三年级 |
| 8 | 黄欧阳锋 | 21 | 男 | 二年级 |
| 10 | 令狐冲 | 23 | 男 | 三年级 |
| 11 | 东方不败 | 23 | 男 | 一年级 |
| 12 | 无崖子 | 23 | NULL | 一年级 |
| 13 | 连城诀 | 23 | NULL | 一年级 |
带BETWEEN的范围查询
SELECT 字段1,字段2,字段3....FROM 表名 WHERE 条件表达式 [NOT] BETWEEN 数值1,AND数值2;
SELECT * FROM t_student WHERE age NOT BETWEEN 22 AND 25;
mysql> SELECT * FROM t_student WHERE age NOT BETWEEN 22 AND 25;
+----+--------------+-----+------+-----------+
| id | stuName | age | sex | gradeName |
+----+--------------+-----+------+-----------+
| 5 | 小龙女 | 21 | 女 | 一年级 |
| 6 | 周芷若 | 26 | 女 | 二年级 |
| 7 | 汪峰 | 20 | 男 | 三年级 |
| 8 | 黄欧阳锋 | 21 | 男 | 二年级 |
+----+--------------+-----+------+-----------+
4 rows in set (0.00 sec)
查询学号为1-9的学生记录:
SELECT * FROM t_student WHERE id BETWEEN 1 AND 9;
mysql> SELECT * FROM t_student WHERE id BETWEEN 1 AND 9;
+----+--------------+-----+------+-----------+
| id | stuName | age | sex | gradeName |
+----+--------------+-----+------+-----------+
| 1 | 张三 | 23 | 男 | 一年级 |
| 2 | 麻子 | 25 | 男 | 二年级 |
| 3 | 李四 | 22 | 男 | 一年级 |
| 4 | 王五 | 23 | 男 | 三年级 |
| 5 | 小龙女 | 21 | 女 | 一年级 |
| 6 | 周芷若 | 26 | 女 | 二年级 |
| 7 | 汪峰 | 20 | 男 | 三年级 |
| 8 | 黄欧阳锋 | 21 | 男 | 二年级 |
| 9 | 杨过 | 22 | 男 | 二年级 |
+----+--------------+-----+------+-----------+
9 rows in set (0.00 sec)
查询年龄小于22但是大于25 的学生信息:
SELECT * FROM t_student WHERE age NOT BETWEEN 22 AND 25;
mysql> SELECT * FROM t_student WHERE age NOT BETWEEN 22 AND 25;
+----+--------------+-----+------+-----------+
| id | stuName | age | sex | gradeName |
+----+--------------+-----+------+-----------+
| 5 | 小龙女 | 21 | 女 | 一年级 |
| 6 | 周芷若 | 26 | 女 | 二年级 |
| 7 | 汪峰 | 20 | 男 | 三年级 |
| 8 | 黄欧阳锋 | 21 | 男 | 二年级 |
+----+--------------+-----+------+-----------+
4 rows in set (0.00 sec)
带LIKE的模糊查询:
SELECT 字段1,字段2,字段3 FROM 表名 WHERE 条件表达式 [NOT] LIKE '字符串';
查询姓名中包含张的学生信息:
SELECT * FROM t_student WHERE stuName LIKE '%张%';
mysql> SELECT * FROM t_student WHERE stuName LIKE '张%';
+----+-----------+-----+------+-----------+
| id | stuName | age | sex | gradeName |
+----+-----------+-----+------+-----------+
| 1 | 张三 | 23 | 男 | 一年级 |
| 2 | 张三丰 | 25 | 男 | 二年级 |
+----+-----------+-----+------+-----------+
2 rows in set (0.00 sec)
 
查询姓名中第一个字为张的学生信息:
SELECT * FROM t_student WHERE stuName LIKE '张%';
mysql> SELECT * FROM t_student WHERE stuName LIKE '张%';
+----+-----------+-----+------+-----------+
| id | stuName | age | sex | gradeName |
+----+-----------+-----+------+-----------+
| 1 | 张三 | 23 | 男 | 一年级 |
| 2 | 张三丰 | 25 | 男 | 二年级 |
+----+-----------+-----+------+-----------+
2 rows in set (0.00 sec)
查询姓为张,名为一个字的学生信息:
SELECT * FROM t_student WHERE stuNAME LIKE '张_';
mysql> SELECT * FROM t_student WHERE stuNAME LIKE '张_';
+----+---------+-----+------+-----------+
| id | stuName | age | sex | gradeName |
+----+---------+-----+------+-----------+
| 1 | 张三 | 23 | 男 | 一年级 |
+----+---------+-----+------+-----------+
1 row in set (0.00 sec)
空值查询:
SELECT 字段1,字段2,字段3 FROM 表名 WHERE 条件表达式 IS [NOT] NULL;
SELECT * FROM t_student WHERE sex IS NULL;
mysql> SELECT * FROM t_student WHERE sex IS NULL;
+----+-----------+-----+------+-----------+
| id | stuName | age | sex | gradeName |
+----+-----------+-----+------+-----------+
| 12 | 无崖子 | 23 | NULL | 一年级 |
| 13 | 连城诀 | 23 | NULL | 一年级 |
+----+-----------+-----+------+-----------+
2 rows in set (0.00 sec)
 
查询性别不为NULL 的学生信息:
SELECT * FROM t_student WHERE sex IS NOT NULL;
mysql> SELECT * FROM t_student WHERE sex IS NOT NULL;
+----+--------------+-----+------+-----------+
| id | stuName | age | sex | gradeName |
+----+--------------+-----+------+-----------+
| 1 | 张三 | 23 | 男 | 一年级 |
| 2 | 张三丰 | 25 | 男 | 二年级 |
| 3 | 李四 | 22 | 男 | 一年级 |
| 4 | 王五 | 23 | 男 | 三年级 |
| 5 | 小龙女 | 21 | 女 | 一年级 |
| 6 | 周芷若 | 26 | 女 | 二年级 |
| 7 | 汪峰 | 20 | 男 | 三年级 |
| 8 | 黄欧阳锋 | 21 | 男 | 二年级 |
| 9 | 杨过 | 22 | 男 | 二年级 |
| 10 | 令狐冲 | 23 | 男 | 三年级 |
| 11 | 东方不败 | 23 | 男 | 一年级 |
+----+--------------+-----+------+-----------+
11 rows in set (0.00 sec)
注意:在插入数据库的时候如果是NULL的话就直接插入NULL,这个值不等于空,也不等于'NULL';
带AND的多条件查询:
SELECT 字段1,字段2,字段3 FROM 表名 WHERE 表达式1 AND 表达式2 [...AND表达式N];
SELECT * FROM t_student WHERE gradeName='一年级' AND sex='男';
mysql> SELECT * FROM t_student WHERE gradeName='一年级' AND sex='男';
+----+--------------+-----+------+-----------+
| id | stuName | age | sex | gradeName |
+----+--------------+-----+------+-----------+
| 1 | 张三 | 23 | 男 | 一年级 |
| 3 | 李四 | 22 | 男 | 一年级 |
| 11 | 东方不败 | 23 | 男 | 一年级 |
+----+--------------+-----+------+-----------+
3 rows in set (0.01 sec)
带OR的多条件查询:
SELECT 字段1,字段2,字段3 FROM 表名 WHERE 表达式1 OR 表达式2 [...OR表达式N];
SELECT * FROM t_student WHERE gradeName='一年级' OR age=23;
mysql> SELECT * FROM t_student WHERE gradeName='一年级' OR age=23;
+----+--------------+-----+------+-----------+
| id | stuName | age | sex | gradeName |
+----+--------------+-----+------+-----------+
| 1 | 张三 | 23 | 男 | 一年级 |
| 3 | 李四 | 22 | 男 | 一年级 |
| 4 | 王五 | 23 | 男 | 三年级 |
| 5 | 小龙女 | 21 | 女 | 一年级 |
| 10 | 令狐冲 | 23 | 男 | 三年级 |
| 11 | 东方不败 | 23 | 男 | 一年级 |
| 12 | 无崖子 | 23 | NULL | 一年级 |
| 13 | 连城诀 | 23 | NULL | 一年级 |
+----+--------------+-----+------+-----------+
8 rows in set (0.00 sec)
去重复查询:
SELECT DISTINCT gradeName FROM t_student;
mysql> SELECT DISTINCT gradeName FROM t_student;
+-----------+
| gradeName |
+-----------+
| 一年级 |
| 二年级 |
| 三年级 |
+-----------+
3 rows in set (0.01 sec)
对查询结果进行排序:
SELECT 字段1,字段2,字段3.... FROM 表名 GROUP BY 字段名;[HAVING 条件表达式][WITH ROLLUP];
1、GROUP BY单独使用时并无太大意义
2、与GROUP_CONCAT()函数一起使用;
3、与聚合函数一起使用;
4、与HAVING一起使用(对查询结果进行排序)
5、与WITH ROLLUP 一起使用(最后一行加入一个总和行)
查询每个年级所有学生的姓名:
SELECT gradeName,GROUP_CONCAT(stuName) FROM t_student GROUP BY gradeName;
mysql> SELECT gradeName,GROUP_CONCAT(stuName) FROM t_student GROUP BY gradeName;
+-----------+----------------------------------------------------------+
| gradeName | GROUP_CONCAT(stuName) |
+-----------+----------------------------------------------------------+
| 一年级 | 张三,无崖子,东方不败,连城诀,小龙女,李四 |
| 三年级 | 王五,令狐冲,汪峰 |
| 二年级 | 周芷若,黄欧阳锋,杨过,张三丰 |
+-----------+----------------------------------------------------------+
3 rows in set (0.00 sec)
查询每一个年级的学生数量:
SELECT COUNT(stuNAme) AS '学生总数',gradeName AS '年级' FROM t_student GROUP BY gradeName;
mysql> SELECT COUNT(stuNAme) AS '学生总数',gradeName AS '年级' FROM t_student GROUP BY gradeName;
+--------------+-----------+
| 学生总数 | 年级 |
+--------------+-----------+
| 6 | 一年级 |
| 3 | 三年级 |
| 4 | 二年级 |
+--------------+-----------+
3 rows in set (0.00 sec)
查询每个年级的学生,并且筛选出人数大于3的年级:
SELECT COUNT (stuName) AS '学生总数',gradeName AS '年级' FROM t_student GROUP BY gradeName HAVING COUNT(stuName) >3;
mysql> SELECT COUNT(stuName) AS '学生总数',gradeName AS '年级' FROM t_student GROUP BY gradeName HAVING COUNT(stuName) >3;
+--------------+-----------+
| 学生总数 | 年级 |
+--------------+-----------+
| 6 | 一年级 |
| 4 | 二年级 |
+--------------+-----------+
2 rows in set (0.00 sec)
 
查询每个年级的学生并在查询的结果添加一个总和行:
SELECT COUNT(studName ) AS '学生人数',gradeName AS '年级' FROM t_student GROUP BY gradeNAME AS ’总数‘ WITH ROLLUP;
mysql> SELECT COUNT(stuName) AS '学生人数',gradeName AS '年级' FROM t_student GROUP BY gradeName WITH ROLLUP;
+--------------+-----------+
| 学生人数 | 年级 |
+--------------+-----------+
| 6 | 一年级 |
| 3 | 三年级 |
| 4 | 二年级 |
| 13 | NULL |
+--------------+-----------+
4 rows in set (0.00 sec)
查询LIMIT分页:
SELECT 字段1,字段2,字段3 FROM表名LIMIT 条件开始,条件结束;
查询前5条学生的详细信息:
SELECT stuName, age,sex gradeName From t_student LIMIT 0,5;
mysql> SELECT stuName,age,sex,gradeName From t_student LIMIT 0,5;
+-----------+-----+------+-----------+
| stuName | age | sex | gradeName |
+-----------+-----+------+-----------+
| 张三 | 23 | 男 | 一年级 |
| 张三丰 | 25 | 男 | 二年级 |
| 李四 | 22 | 男 | 一年级 |
| 王五 | 23 | 男 | 三年级 |
| 小龙女 | 21 | 女 | 一年级 |
+-----------+-----+------+-----------+
5 rows in set (0.00 sec)
 
 

深入学习之mysql(三)单表操作的更多相关文章

  1. 学习MySQL之单表操作(二)

    ##单表操作 ##创建表 CREATE TABLE t_employee( empno ), ename ), job ), MGR ), Hiredate DATE DEFAULT '0000-00 ...

  2. Mysql(三):表操作

    一 存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制 详见:http://www.cnblogs.com/6324TV/p/8481061.html 二 表介绍 表相当于文 ...

  3. Hibernate学习笔记(一)-->数据库单表操作

    Hibernate框架是一个全ORM映射框架,是一个非常流行的数据库操作框架之一,现在比较流行的还有MyBatis半ORM映射框架 在MyEclipse IDE开发工具中,可以很轻松的搭建Hibern ...

  4. mysql三:表操作

    一.存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制. 详见:点击查看 二.表的介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标 ...

  5. orm单表操作

    二.orm简介 ORM:object relation mapping (ORM是“对象-关系-映射”的简称) MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦, ...

  6. Django单表操作

    一.数据库相关设置 配置ORM的loggers日志: # 配置ORM的loggers日志 LOGGING = { 'version': 1, 'disable_existing_loggers': F ...

  7. MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询

    MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...

  8. Django系列(三):单表操作

    1.ORM简介 MTV或者MTV框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...

  9. Django学习笔记(7)——单表操作和多表操作

    单表操作 1,创建模型 创建名为book的APP,在book下的models.py中创建模型: from django.db import models # Create your models he ...

  10. day 46 Django 学习3 数据库单表操作以及反向解析

    前情提要: Django 已经学了不少了, 今天学习链接数据库的操作.以及相关的反向解析等 一:反向解析 1:反向解析模板层 跳转时设定url会随着前面的路由改变而改变         2:反向解析之 ...

随机推荐

  1. mybat-大文件的存取

    在mybatis中存储大文件可以直接存 取的时候取出来的是二进制 1.在实体类中添加大文本和图片 package com.java1234.model; public class Student { ...

  2. 转 zigbee学习笔记---Channel、PANID、发射功率及其它参数

    现对z-stack里几个网络参数的设置以及如何获取总结一下.信道配置:Zigbee在3个频段定义了27个物理信道:868MHz频段中定义了1个20Kb/s信道,915MHz频段中定义了10个40Kb/ ...

  3. Codeforces Round #327 590B Chip 'n Dale Rescue Rangers(等效转换,二分)

    t和可到达具有单调性,二分就不多说了.下面说下O(1)的做法,实际上是等效转换,因为答案一定存在,如果在t0之前,那么分解一下 直接按照只有v计算就可以了.反过来如果计算的结果大于t0,那么表示答案在 ...

  4. python_53_函数补充

    def test1(x,y=2): print(x,y) test1(1) test1(1,3) test1(1,y=4) #默认参数特点:调用函数的时候,默认参数非必须传递,默认参数放在后边 #用途 ...

  5. python_52_函数返回值2

    def test1(x,y): print(x,y) test1(1,2)#位置参数调用,按顺序来,与形参一一对应 test1(y=1,x=2)#输出为2 1,不是1 2.关键字参数调用按关键字,不按 ...

  6. C#获取Honeywell voyager 1400g扫码后的数据

    一.在类方法中加入 System.IO.Ports.SerialPort com;二.在构造方法中加入 try {   com = new System.IO.Ports.SerialPort(&qu ...

  7. Jquery-EasyUI combobox下拉框使用

    制作一个json文件: <input data-options="url:'${pageContext.request.contextPath }/json/combobox_data ...

  8. C# FileStream对象

    FileStream对象表示在磁盘或网络路径上指向文件的流.当类提供向文件读写字节的方法时,经常使用StreamReader或StreamWriter执行这些功能.这是因为FileStream类操作字 ...

  9. linux网络编程之断点传输文件

    以下载链接"http://www.boa.org/boa-0.94.13.tar.gz"为例: 断点续传实验大概步骤: ===================== 1,使用geth ...

  10. Mysql--7种Join查询

    0.sql的执行顺序 手写顺序 机读顺序 总结 ①From:对from左边的表和右边的表计算笛卡尔积,产生虚拟表c1 ②On:对c1中的数据进行on过滤,只有符合过滤条件的数据记录才会记录在虚拟表c2 ...