vlambda博客
学习文章列表

˙Ⱉ˙学习笔记——mysql查询(1)


mysql查询


查询语句,还是要记得多看多记多背多练!!


--数据的准备


--创建一个数据库

Create database python_test charset=uft8

如果是python-04要带‘’,英文字母下划线不用


--使用一个数据库

use python_test;


--显示使用的当前数据是哪个?

select database();


--创建一个数据表(记录 字段)

crate table students(

id int unsigned primary key auto_increment not null,

name varchar(20) default ‘ ‘,

height decimal(5,2),

gender enum(‘男’,’女’,’中性’,’保密’) default “保密”,

cls_id int unsigned default ‘0’,

is_delete bit defaule 0

   ); 

一个比特两种表示,0和1,两个比特四种00,01,10,11


--classes表

Create table classes(

     id int unsigned auto_increment primary key not null,

     name varchar(30) not null

);


-- 向students表中插入数据

insert into students values

(0,'小明',18,180.00,2,1,0),

(0,'小月月',18,180.00,2,2,1),

(0,'彭于晏',29,185.00,1,1,0);


-- 向classes表中插入数据

insert into classes values (0, "python_01期"), (0, "python_02期");


--查询


 --查询所有字段

 --select * from表名

  select *from students;

  select *from classes;



  --查询指定字段

  --select 列1,列2,…from表名;

  select name,age from students;

  select id, name from classes;



  --使用as给字段起别名

  --select 字段 as名字… from表名;

  select name as 姓名,age as年龄from students;


  --select 表名,字段 …from表名;

  select students.name, students.age from students;


  --可以通过as给表起别名

  --select别名,字段…from 表名as别名;

  select s.name, s.age from students as s;

  select students.name, students.age from students as s; (失败)


  --消除重复行

  --distinct字段

  select distinct gender from students;


--条件查询


--比较运算符

--select …from 表名where …

-->

--查询大于18岁的信息

select * from students where age>18;

select id,name,gender from students where age>18;


--<

--查询小于18岁的信息

select * from students where age<18;


-->=

--<=

--查询小于或者等于18岁的信息


--=

--查询年龄为18岁的所有学生的名字

select * from students where age=18;


--!=或者<>(后者不通用


--逻辑运算符


--and

--18到28之间的所有学生信息

select * from students where age>18 and age <28;

--失败select *from students where age>18 and <28


--18岁以上的女性

select * from students where age>18 and gender=“女”;

select * from students where age>18 and gender=2


--or

--18岁以上或者身高高过180(包含)以上

select * from students where age>18 or height>=180;


--not

--不在 18岁以上的女性 这个范围内的信息

--select * from students where not age>18 and gender=2; ×not只否定age

select * from students where not (age>18 and gender=2);


--年龄不是小于或者等于18 并且是女性

select * from students where not age<=18 and gender=2;


--模糊查询


--like (用的少,效率低)

--% 替换1个或者多个

--_ 替换1个

--查询姓名中 以“小”开始的名字

select name from students where name like “小%”;


--查询姓名中 以“小”开始的名字

select name from students where name like “%小%”;


--查询有2个字的名字

select name from students where name like “__”;


--查询有3个字的名字

select name from students where name like “___”;


--查询至少有2个字的名字

select name from students where name like “__%”;


--rlike 正则

--查询以 周开始的姓名

select name from students where name rlike “^周.*”;


--查询以 周开始,伦结尾的姓名

select name from students where name rlike “^周.*伦$”;


--范围查询


--in(1,3,8)表示在一个非连续的范围内

--查询 年龄为18,34的姓名

select name, age from students where age=18 or age =34;

select name, age from students where age in (12,18,34);


--not in 不非连续的范围之内

--年龄不是12, 18,34岁之间的信息

Select name, age from students where age not in (12,18,34);


--between …and …表示在一个连续的范围内

--查询 年龄在18到34之间的信息

select name, age from students where age between and 34;


--not between…and …表示不在一个连续的范围内

--查询 年龄不在18到34之间的信息

select * from students where age not between 18 and 34;

select * from students where not age between 18 and 34;

--失败select * from students where age not (between 18 and 34);


--空判断


--判空is null

--查询身高为空的信息

select * from students where height is null/NULL/Null;


--判非空is not null

select * from students where height is not null;


a=None 表示没有指向,python里用is null表示

a=“” 表示a指向一个字符串,字符串为空

上面两者不一样


--排序


--order by字段 (默认从小到大)

--asc从小到大排列,即升序

--desc从大到小排序,即降序


--查询年龄在18到34岁之间的男性,按照年龄从小到大排序

select *from students where(age between 18 and 34) and gender =1 order by age;

select *from students where(age between 18 and 34) and gender =1 order by age asc;

--查询年龄在18到34岁之间的女性,身高从高到矮排序

select *from students where (age between 18 and 34) and gender =2 order by height desc;


--order by 多个字段

--查询年龄在18到34岁之间的女性,身高从高到矮排序,如果身高相同的情况下按照年龄从小到大排序

select *from students where (age between 18 and 34) and gender =2 order by height desc, age asc;


--查询年龄在18到34岁之间的女性,身高从高到矮排序,如果身高小童的情况下按照年龄从大到小排序

--如果年龄也相同那么按照id从大到小排序

select *from students where (age between 18 and 34) and gender =2 order by height desc, age asc, id desc;


--按照年龄从小到大,身高从高到矮的排序

select * from students order by age asc, height desc;