• 单表查询


    一、查询语法

    SELECT 字段1,字段2... FROM 表名
                      WHERE 条件
                      GROUP BY field
                      HAVING 筛选
                      ORDER BY field
                      LIMIT 限制条数
    二、关键字的优先级
    重点中的重点:关键字的执行优先级
    from
    where
    group by
    having
    select
    distinct
    order by
    limit

    1.找到表:from

    2.拿着where指定的约束条件,去文件/表中取出一条条记录

    3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组

    4.按照select后的字段得到一张新的虚拟表,如果有聚合函数,则将组内数据进行聚合

    5.将4的结果过滤:having,如果有聚合函数也是先执行聚合再having过滤

    6.查出结果:select

    7.去重

    8.将结果按条件排序:order by

    9.限制结果的显示条数

    三、where约束

    强调:where是一种约束条件,mysql会拿着where指定的条件去表中取数据,而having则是在取出数据后进行过滤

    where字句中可以使用:

    1. 比较运算符:> < >= <= <> !=
    2. between 80 and 100 值在10到20之间
    3. in(80,90,100) 值是10或20或30
    4. like 'egon%'
        pattern可以是%或_,
        %表示任意多字符
        _表示一个字符 
    5. 逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not

    #1:单条件查询
        SELECT name FROM employee
            WHERE post='sale';
            
    #2:多条件查询
        SELECT name,salary FROM employee
            WHERE post='teacher' AND salary>10000;
    
    #3:关键字BETWEEN AND
        SELECT name,salary FROM employee 
            WHERE salary BETWEEN 10000 AND 20000;
    
        SELECT name,salary FROM employee 
            WHERE salary NOT BETWEEN 10000 AND 20000;
        
    #4:关键字IS NULL(判断某个字段是否为NULL不能用等号,需要用IS)
        SELECT name,post_comment FROM employee 
            WHERE post_comment IS NULL;
    
        SELECT name,post_comment FROM employee 
            WHERE post_comment IS NOT NULL;
            
        SELECT name,post_comment FROM employee 
            WHERE post_comment=''; 注意''是空字符串,不是null
        ps:
            执行
            update employee set post_comment='' where id=2;
            再用上条查看,就会有结果了
    
    #5:关键字IN集合查询
        SELECT name,salary FROM employee 
            WHERE salary=3000 OR salary=3500 OR salary=4000 OR salary=9000 ;
        
        SELECT name,salary FROM employee 
            WHERE salary IN (3000,3500,4000,9000) ;
    
        SELECT name,salary FROM employee 
            WHERE salary NOT IN (3000,3500,4000,9000) ;
    
    #6:关键字LIKE模糊查询
        通配符’%’
        SELECT * FROM employee 
                WHERE name LIKE 'eg%';
    
        通配符’_’
        SELECT * FROM employee 
                WHERE name LIKE 'al__';

    表一对一

    create table customer(
    id int primary key auto_increment,
    name varchar(50),
    qq int,
    phine int
    );
    
    insert  into customer(name,qq,phine) values('egon','251575084','1779422095'),
    ('alex','251575089','1779422558');
    
    
    
    create table student(
    id int primary key auto_increment,
    course varchar(20),
    c_id int,
    foreign key(c_id) references customer(id)
    on delete cascade
    on update cascade
    );
    
    
    insert into student(course,c_id) values ('python','5');

    表一对多

    create table press(
    id int primary key auto_increment,
    name varchar(20)
    );
    
    create table book2(
    id int primary key auto_increment,
    name varchar(20),
    press_id int not null,
    foreign key(press_id) references press(id)
    on delete cascade
    on update cascade
    );
    
    
    insert into press(name) values
    ('人民文学出版社'),
    ('人民邮电出版社'),
    ('科学出版社');
    
    insert into book2(name,press_id) values
    ('和平',1),
    ('世界十大名著',2),
    ('世界上的另一个你',2),
    ('人性弱点',3),
    ('爆笑校园',2),
    ('傲慢与偏见',3);

    多对一

    create table user(
    id int primary key auto_increment,
    name varchar(10)
    );
    
    create table password(
    id int primary key auto_increment,
    user_id int ,
    password varchar(20),
    foreign key(user_id) references password(id)
    on update cascade
    on delete cascade
    );
    
    
    insert into user(name) values
    ('egon1'),
    ('egon2'),
    ('egon3'),
    ('egon4'),
    ('egon5'),
    ('egon6');
    
    
    insert into password(user_id,password) values
    (3,'alex3714'),
    (5,'alex371a');

    多对多

    create table book(
    id int primary key auto_increment,
    name varchar(10),
    price int
    );
    
    create table author(
    id int primary key auto_increment,
    name varchar(10)
    );
    
    
    create table author2book(
    id int primary key auto_increment,
    book_id int ,
    author_id int, 
    foreign key(book_id) references author2book(id)
    on delect cascade
    on delect cascade,
    foreign key(author_id) references author2book(id)
    on delect cascade
    on delect cascade,
    unique(book_id,author_id)
    );
     
     
  • 相关阅读:
    ThinkPHP教程_PHP框架之ThinkPHP(三)【系统常量与模板替换】
    ThinkPHP教程_PHP框架之ThinkPHP(二)【URL路径访问与模块控制器、URL四种模式、PATHINFO的两种模式、模板与控制器之间的关系】
    ThinkPHP教程_PHP框架之ThinkPHP(一)【入门和介绍、ThinkPHP版本和文件夹规范、项目入口文件】
    Markdown,技术简历编辑的一缕清风...
    Zend Studio 13.5的安装、破解和汉化
    原生JS配合AJAX完成省市县三级联动(带数据库、PHP+Smarty)
    DAL与数据库类型的对应关系
    mysql 学习
    关于MySQL的分区(partion)
    Response.Write,Page.RegisterClientScriptBlock和Page.RegisterStartupScript的区别
  • 原文地址:https://www.cnblogs.com/mengqingjian/p/7510718.html
Copyright © 2020-2023  润新知