MySQL 您所在的位置:网站首页 mysql查询年龄在20到23的学生 MySQL

MySQL

2024-07-17 10:59| 来源: 网络整理| 查看: 265

数据类型和约束

常用的数据类型

整数: int, bit小数:decimal字符串:varchar, char, text日期类型:date, time, datetime枚举类型(enum)

特别说明类型如下

decimal表示浮点数,如decimal(5,2)表示共存5位数,小数占两位char表示固定长度的字符串,如char(3),如果填充 ‘ab’ 时会补一个空格 'ab ’varchar表示可变长度的字符串,如varchar(3),填充 ‘ab’ 时就会存储 ‘ab’对于图片、音频、视频等文件,不存储在数据库种,而是上传到某个服务器上,然后在表种存储这个文件的保存路径字符串text表示存储大文本,当字符串大于4000时推荐使用,比如技术博客

数据约束

约束本质上是对数据在数据类型限定的基础上添加的额外要求 常见的约束如下:

主键 primary key:物理上存储的顺序,MySQL建议所有表的主键字段都叫id,类型为 int unsigned非空 not null:此字段不允许填写空值唯一 unique:此字段的值不允许重复默认 defalut:当不填写字对应的值会使用默认值,如果填写时以填写为准外键 foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常 操作数据库 语句说明net start mysql启动MySQL服务mysql -u root -p连接数据库show databases;查看所有数据库selsct version();查看数据库版本号select database();查询当前数据库create database 数据库名 charset=utf8;创建数据库show create database 数据库名;查看这个数据库是怎么创建的use 数据库名进入数据库drop database 数据库名;删除数据库 数据表的操作 语句说明show tables;查看当前数据库种所有的表show create table 表名查看表的创建语句desc 表名;查看表结构(查看表字段的一些信息)drop table 表名删除表create table test(字段 类型 约束 [ ,字段 类型 约束);创建表

添加修改删除字段

-- 修改表-添加字段 mascot(吉祥物) -- alter table 表名 add 列名 类型;给classes表添加mascot字段 alter table classes add mascot varchar(50); -- 修改表-修改字段:不重命名版 -- alter table 表名 modify 列名 类型及约束 alter table classes add modify 列名 varchar(100); -- 修改表-修改字段:重命名版 -- alter table 表名 change 原名 新名 类型及约束 alter table classes change mascot jxw int unsigned; -- 修改表-删除字段 -- alter table 表名 drop 列名 alter table classes drop jxw;

添加数据

-- insert into 表名(字段1, 字段2) values(值1,值2); -- 主键字段 额可以用 0 null defalut来占位 -- 向classes表中插入数据 insert into classes(id, name) values(1, "张三"); -- id设置了自增(auto_increment)可以不写id insert into classes(name) values("李四"); -- 向students表插入 一个学生信息 +--------+-------------------------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------------------------------+------+-----+---------+----------------+ | id | int unsigned | NO | PRI | NULL | auto_increment | | name | varchar(30) | NO | | NULL | | | age | int unsigned | YES | | NULL | | | high | decimal(3,2) | YES | | NULL | | | gender | enum('男','女','保密','中性') | YES | | 保密 | | | cls_id | int unsigned | YES | | NULL | | +--------+-------------------------------------+------+-----+---------+----------------+ -- 全部插入 -- insert into 表名 values(值1, 值2, 值3...); insert into students values(1, "张三", 18, 1.83, '男', 1); -- 部分插入 -- insert into 表名(列1, ...) values(值1, ...); insert into students(name) values("李四"); -- 多行插入 -- insert into 表名(列1) values (值), (值) insert into students(name, age) values ("王五", 20), ("马六", 21), ("小七", 22), ("老八", 23);

修改

-- update 表名 set 字段名=值1, 字段名2=值2... where 条件 -- 全部修改 -- 修改所有age都是10 update students set age = 10; -- 按条件修改 -- 修改id为3的age等于10 update students set age = 10 where id = 3 -- 按条件修改多个值 -- update students set gender = "", age="" where name="xxx" update students set age = 20, high=1.66 where name="小七"

查询

-- 查询所有列 -- select * from 表名 -- 查询students表中的所有数据信息 select * from students; -- 指定条件查询 -- 查询id为1的学生所有信息 select * from students where id = 1; -- 查询指定列 -- select 列1, 列2, ... from 表名; -- 查询表中所有的name字段和age字段 select name, age from students; -- 查询表中id=1的name字段和age字段 select name, age from students where id = 1; -- 可以使用as为列或表指定别名 -- select 字段[as 别名], 字段[as 别名] from 数据表; select name as "姓名", age as "年龄" from students; +--------+--------+ | 姓名 | 年龄 | +--------+--------+ | 张三 | 18 | | 李四 | NULL | | 王五 | 20 | | 马六 | 21 | | 小七 | 20 | | 老八 | 23 | +--------+--------+

删除

-- 物理删除,不可逆 -- delete from 表名 where id = 4 delete from students where id = 4; -- 逻辑删除 -- 用一个字段来表示 这条信息是否已经不能在使用了 -- 给students表添加一个 is_delete 字段 bit 类型 alter table students add is_delete bit default 0; -- update 表名 set is_delete = 1 where id = ; update students set is_delete = 1 where id = 1 -- distinct 字段 去重重复 select distinct gender from students; -- 使用分组的做法消除重复 select gender from students group by gender; 条件查询

比较运算符

-- select .... from 表名 where .... -- 查询年龄大于18岁的学生信息 > select * from students where age > 18; -- 查询年龄大于等于18岁的学生信息 >= select * from students where age >= 18; -- 查询年龄为18岁的学生信息 = select * from students where age = 18; -- 查询年龄不为18岁的学生信息 != 或者 select * from students where age != 18; select * from students where age 18;

逻辑运算符

-- and / between .. and .. -- 年龄大于18 并且 小于28 之间的所有学生信息 select * from students where age >= 18 and age = 18 and gender = '女'; -- 枚举的数据类型可以用数字来表示,数字从1开始 select * from students where age >= 18 and gender = 2; -- or 或者的意思 -- 18岁以上或者生超高180(包含)以上的学生信息 select * from students where age > 18 or high >= 1.80; -- not 取反的意思 -- 不在18岁以上的女性 select * from students where not (age > 18 and gender = '女');

模糊查询(where name like 要查询的数据)

-- like -- % 替换任意个 -- _ 替换1个 -- 查询姓名中 以 "张" 开始的名字的学生信息 select * from students where name like "张%"; -- 查询姓名中 有 "号" 所有的名字的学生信息 select * from students where name like "%号%"; -- 查询有 2 个字的名字的学生信息, 查询3个字的名字就是三个下划线 select * from students where name like "__"; -- 查询只要有2个字的名字的学生信息 select * from students where name like "__%";

范围查询

-- in (1, 3, 8) 表示在一个非连续的范围内 -- 查询年龄为 18 或 20 的学生信息 select * from students where age in (18, 20); -- 不是区间,是确切的值 -- not in 不是非连续的范围之内 -- 年龄不是 18 或 20 的学生信息 select * from students where age not in(18, 20); -- between ... and ... 表示在一个连续的范围内 -- 查询 年龄在18到20之间的学生信息 select * from students where age between 18 and 20; -- not between ... and ... 表示不在一个连续的范围内 -- 查询 年龄不在18到20之间的学生信息 select * from students where age not between 18 and 20; -- 空判断 -- 判空 is null -- 查询身高为空的学生信息 select * from students where high is null; -- 判非空 is not null select * from students where high is not null;

排序查询

-- order by 字段 -- asc -- asc从小到大排列,即升序 -- desc -- desc从大到小排序,即降序 -- 查询年龄在18岁到30岁之间的男性,按照年龄从小到大排序,by 后的字段是什么就按照什么排序,是年龄就按照年龄排序,是身高就按照身高排序 select * from students where gender = 1 and age between 18 and 30 order by age asc; -- 查询年龄在 10 到 30 岁之间的女性,按照身高排序从高到低排序 select * from students where gender = 2 and age between 10 and 30 order by high desc; -- order by 多个字段 多个字段排序用逗号分开 -- 查询年龄在10 到 30 之间的女性,身高从高到矮排序,如果在身高相同的情况下就按照年龄从小到大排序 select * from students where gender = 2 and age between 10 and 30 order by high desc, age asc; -- 如果年龄也相同那么按照id从大到小排序 select * from students where gender = 2 and age between 10 and 30 order by high desc, age asc, id desc;

聚合函数

-- 总数 -- count -- 查询男性有多少人 select count(*) from students where gender = 1; -- 最大值 -- max -- 查询最大的年龄 select max(age) from students; -- 查询女性的最高身高 select max(high) from students where gender = 2; -- 最小值 -- min -- 查询最小的年龄 select min(age) from students; -- 求和 -- sum -- 计算所有身高大于1.70的年龄总和 select sum(age) from students where high >= 1.70; -- 平均值 -- avg -- 计算平均年龄 select avg(age) from students; -- 平均值计算 sum(age)/count(*) -- 年龄总和除以全部人数 -- 四舍五入 round(123.23, 1) 保留1位小数 -- 计算所有人的平均年龄,保留2位小数 select round(avg(age), 2) from students; -- 计算男性的平均身高 保留2位小数 select round(avg(high), 2) from students where gender = 1; # 聚合函数计算的时候不会把null计算进去

分组查询

-- 分组的写法 -- select 分组的字段, from 表名 group by 分组字段; -- group by -- 按照性别分组,查询所有的性别 -- 以性别分组,性别放在第一列,第二列是每个性别有多少人 select gender from students group by gender; -- 计算每种性别的人数 select gender, count(*) from students group by gender; -- group_concat(...) -- 查询同种性别中的姓名 group_concat(name) select gender, group_concat(name) from students group by gender; -- 查询每组性别的平均年龄 select gender, avg(age) from students group by gender; -- having(注意having和group by 连用 having后通常也要跟 聚合函数) -- 聚合函数如果作为条件出现,只能和having配合。不能和where配合使用 -- 查询平均年龄超过30岁的性别,以及姓名 select gender, avg(age), group_concat(name) from students group by gender having avg(age) > 20; -- 查询每种性别中的人数多于2个的信息 select gender, count(*) from students group by gender having count(*) > 5;

分页查询

-- limit start, count -- limit 放在最后面(注意) -- 查询前5个数据 select * from students limit 5; -- 通用写法 -- 从第二条数据开始,显示后面的5条数据,3到7 select * from students limit 2, 5; -- 先排序后分页,年龄按照从小到大进行排序,从第二条消息开始,往后显示10条消息 select * from students order by age asc limit 2, 10;

连接查询 (表与表之间的连接, 为了更好的查出有效数据)

-- inner join ... on -- select ... from 表A inner join 表B; -- 查询 有能够对应班级的学生以及班级信息 select * from students inner join classes on students.cls_id = classes.id; -- 按照要求显示姓名、班级 select students.name, classes.name from students inner join classes on students.cls_id = calsses.id; -- 给表起名字 select B1.name as 姓名, B2.name as 班级 from students as B1 inner join classes as B2 on B1.cls_id = B2.id order by B1.cls_id asc; -- 按照班级从小到大排序 select students.*, classes.name from students inner join classes on students.cls_id = classes.id order by students.cls_id, students.id asc;

子查询(一个查询的结果作为另一个查询的一部分)

-- 标量子查询:子查询返回的结果是一个数据(一行一列) -- 列子查询:返回的结果是一列(一列多行) -- 行子查询:返回的结果是一行(一行多列) -- 查询高于平均身高的学生信息 select * from students where high > (select avg(high) from students); -- 查询学生的班级号能够对应的 学生姓名 班级id select students.name, students.cls_id from students where cls_id = 1 or cls_id = 2; -- 使用on(1,2) select students.name, students.cls_id from students where cls_id on(1,2); -- 在不知道有哪些班级的情况下,使用子查询让他自己去里面找有哪些班级,自动去里面匹配 select students.name, students.cls_id from students where cls_id on(select id from classes);


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有