zoukankan      html  css  js  c++  java
  • 数据库最常用的查询方法详解,sql语句详解

    —— 数据准备

    —— 创建一个数据库

    create database python_test charset=utf8;

     

    —— 使用一个数据库

    use python_test;

     

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

    select database();

     

    —— 创建一个数据表

    —— students表

    create table students(

    id int primary key not null auto_increment,

    name varchar(20) default ‘’,

    age tinyint unsigned default 0,

    height decimal(5,2),

    gender enum(‘男’,’女’,’中性’,’包名’) default ‘保密’,

    cls_id int unsigned default 0,

    is_delete bit default 0

    );

     

    —— classes表

    create table classes(

    id int primary key auto_increment not null,

    name varchar(30) not null

    );

    — 查询

    — 查询所有字段

           —— select * from 表名;

    select * from students;

    select * from classes;

    select id, name from students;

     

    —— 查询指定字段

    select 字段 … from 表名;

    select name, age from students;

     

    —— 使用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;

     

     

    —— 消除重复行

    distinct 字段

    select distinct genter from students;

     

    —— 条件查询

    —— 比较运算符

    select … from 表名 where …

    —>

    — 查询大于18岁的信息

    select * from students where age>18;

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

     

    — <

    查询小于18岁的信息

    select * from students where age<18;

     

    — >= 

    — <= 查询小于或大于等于18岁的信息

    select * from students where age>=18;

    select * from students where age<=18;

     

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

    select * from students where age=18;

     

    — != 或者 <>

    select * from students where age!=18;

    select * from students where age<>18;

    —— 逻辑运算符

    —— and 

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

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

     

    —— 18以上的女性信息

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

     

    —— or 

    —— 18以上或者身高超过180(包含)以上

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

     

    —— not

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

    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 '__';

     

    —- 查询至少有3个字以上的姓名

    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 * from students where age=18 and age=34;

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

     

     

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

    — 年龄不是18、34 岁之间的信息

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

     

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

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

    select * from students where age between 18 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;

     

    —— 空判断

    — 判空 is null

    — 查询身高为空的信息

    select * from students where height is null;

     

    — 判非空 is not null

    select * from students where height is not null;

     

    —— 排序

    — order by 字段

    — asc 从小到大排序  即升序

    — desc 从大到小排序  即降序

     

    — 查询年龄在10到60之间的男性, 按照年龄从小到大排序

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

    select * from students where (age between 10 and 60) 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) order by height desc, age asc;

     

    — 如果年龄也相同 那么按照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;

     

    —— 聚合函数

    — 总数

    — count

    — 查询男性有多少人,女性有多少人

    select count(*) as 男性人数 from students where gender=1;

    select count(*) as 女性人数 from students where gender=2;

     

    — 最大值

    — max

    — 查询最大的年龄

    select max(age) as 年龄最大是 from studentes;

     

    — 查询女性的最高 身高

    select max(height) as 女性的最高身高是 from students  where gender=2;

     

    — 最小值

    — min

    select min(height) from students where gender=2;

     

    — 求和

    — sum

    — 计算所有人的年龄总和

    select sum(age) from students;

     

    — 平均值

    —avg

    — 计算平均年龄

    select avg(age) from students;

     

    — 计算平均年龄 sum(age)/count(*)

    select sum(age)/count(*) from students;

     

    — 四舍五入 round(123,23, 1) 保留1位小数

    — 计算所有人的平均年龄,保留2位小数

    select round(avg(age), 2) from students;

     

    — 计算男性的平均身高,保留2位小数

    select round(avg(height), 2) from students where gender=1;

     

    —— 分组

    — group by

    — 按照性别分组,查询所有的性别

    select gender from students group by gender;

     

    — 计算每种性别中的人数

    select gender, count(*) from students group by gender;

     

    — 计算男性的人数

    select gender, count(*) from students where gender=1 group by gender;

     

    - 查询男性姓名,id,age

    select gender, group_concat(name, id, age) from students where gender=1 group by gender

    select gender, group_concat("姓名:",name, "id:",id, "年龄:",age) from students where gender=1 group by gender;

     

     

    — group_concat(…)

    — 查询同种性别中的姓名

    select gender, group_concat(name) from students group by gender;

     

    — having

    — 查询平均年龄超过30岁的性别 以及 姓名 having avg(age) > 30

    select gender, group_concat(name), avg(age) from students group by gender having avg(age)>30;

     

    — 查询每种性别中的人数多于2个信息

    select gender, group_concat(name) from students group by gender having count(*)>2;

     

    —— 分页

    — limit start, count

    — 限制查询出来的数据个数

    select * from students where gender=1 limit 2;

     

    — 查询前5个数据

    select * from students limit 0, 5;

     

    — 查询id6-10(包含)的书序

    select * from students limit 5, 5;

     

    — 每页显示2个,第一个页面

    select * from students limit 0, 2;

     

    — 每页显示2个,第2个页面

    select * from students limit 2, 2;

     

    — 每页显示2个,第三个页面

    select * from students limit 4, 2;

     

    — 每页显示2个,第四个页面

    select * from students limit 6, 2; ——> limit (第n页-1)*每页的个数, 每页的个数;

     

    — 每页显示2个,显示第6页信息,按照年龄从小到大排序

    select * from students order by age limit 10, 2;

     

    —— 连接查询

    — 内连接 inner  join … on

    — select * from 表1 inner join 表2 on 条件; 

    — 查询 有能够对应班级的学生以及班级信息

    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=classes.id;

     

    — 给数据表起名字

    select s.name, c.name from students as s inner join classes as c on s.cls_id=c.id;

     

    — 查询 有能够对应班级的学生以及班级信息,显示学生的所有信息,只显示班级名称

    select s.*,c.name from students as s inner join classes as c on s.cls_id=c.id

     

    — 在以上的查询中,将班级姓名显示在第1列

    select c.name, s.* from students as s inner join classes as c on s.cls_id=c.id;

     

    — 查询 有能够对应班级的学生以及班级信息,按照班级进行排序

    select c.name, s.* from students as s inner join classes as c on s.cls_id=c.id order by c.name;

    select c.name, s.* from students as s inner join classes as c on s.cls_id=c.id order by c.name,s.id;

     

     

    —- left join

    —- 查询每位学生对应的班级信息

    select * from students as s left join classes as c on s.cls_id=c.id;

     

    — 查询没有对应班级信息的学生

    select * from students as s left join classes as c on s.cls_id=c.id having c.id is null;

     

    — right join on

    — 将数据表名互换位置,用left join完成

     

    —— 自关联

    — 省级联动

    — 查询所有省份

    select * from area_info where pid in null;

    — 查询出山东省有哪些城市

    select * from area_info as province inner join area_info as city on province.aid=city.pid having province.atitle='山东省';

     

    —- 查出青岛市有哪些县城

    select * from area_info as city inner join area_info as country on city.aid= country.pid having city.atitle=‘青岛市’;

     

     

    —— 子查询

    —- 标量子查询

    — 查询出高于平均身高的信息

    select * from students where height>(select avg(height) from students);

     

     

     

  • 相关阅读:
    VC++使用socket进行TCP、UDP通信实例总结
    [Android Pro] 调用系统相机和图库,裁剪图片
    [Android Pro] 查看 keystore文件的签名信息 和 检查apk文件中的签名信息
    [Android 新特性] 谷歌发布Android Studio开发工具1.0正式版(组图) 2014-12-09 09:35:40
    [Android 新特性] 有史来最大改变 Android 5.0十大新特性
    [Android Pro] service中显示一个dialog 或者通过windowmanage显示view
    [Android Pro] 通过Android trace文件分析死锁ANR
    [Android Memory] Android 的 StrictMode
    [Android Memory] Android性能测试小工具Emmagee
    [Android Memory] Android内存管理、监测剖析
  • 原文地址:https://www.cnblogs.com/peijz/p/12360346.html
Copyright © 2011-2022 走看看