SQL基础语法

一.DDL: 操作表

        1.创建表(create)
        create table users(

        );

        2.查询表(Retrieve)
        desc 查询表结构

        3.数据类型
        double(总长度,小数点后保留的位数)
        varchar(20)        存储性能低   变长   节约空间
        char()定长字符串    存储性能高   定长   浪费空间

        4.删除表 drop table 表名
        drop table if exists 表名

        5.修改表   alter table 表名+
        修改表名
        alter table 表名 rename to 新表名;
        添加一列
        add  table  表名 add 列名 数据类型;
        修改数据类型
        alter table 表名 modify 列名 新数据类型;
        修改列名和数据类型
        alter table 表名 change 列名 新列名 新数据类型;
        删除列
        alter table 表名 drop 列名;

二.DML :  对表中数据进行增删改

        1.添加数据
        给指定列添加数据:
        insert into 表名 (列名1,列名2)values(值1,值2);
        给所有列添加数据
        insert into 表名 values();

        2.修改数据   update 表名 set 列名1=值1 [where 条件]
         注意:修改语句中如果不加条件,则将所有数据都修改

        3.删除数据
        delete from 表名

三.DQL: 查询数据

                                                                        基础查询

        1.查询多个字段
        select 字段列表 from 表名;
        select * from 表名; 尽量自己写字段表名

         2.去掉重复记录
        select distinct 字段列表 from 表名;

         3.取别名
        AS    as可省略

                                         条件查询语法

        1.&& 并且         在SQL中建议使用and
        between  20 and 30   在20-30

        2.等于 =    不等于 != 或<>

        3.或者 or   ||   in(18,20)

        4.null值的比较,不能使用=,!=,需要使用 is is not
        is null         is not null

        5.like 模糊查询
        通配符 : _ 代表单个字符        %代表任意个数字符


                        排序查询:   order by  排序字段名1   [排序方式1],[排序方式2]
        默认asc 升序   desc 降序
        多个排序条件 : 只有第一个排序条件相同时,才会根据第二个排序

                                  分组查询:      group by 


        聚合函数:将一列数据作为一个整体,进行纵向计算  (null不参与聚合函数的运算)
                count(列名)   
            count 统计的列名不能为null
            取值:1.主键 2.*
        max(列名)
        min(列名)
        sum(列名)
        avg(列名)

        分组后,查询字段要么是分组字段,要么是聚合函数,查询其它字段没有意义
        where 不能对聚合函数进行判断,having可以

        where在分组前使用   having在分组后使用
        执行顺序: where>聚合函数>having

                                     分页查询  limit


        limit 起始索引,查询条目数
        1.从0开始查询,查询3条数据
        select * from stu limit 0,3
        2.每页显示3条数据,查询第一页数据
        select * from stu limit 0,3
        3.每页显示3条数据,查询第二页数据
        select * from stu limit 3,3     
        起始索引公式:(当前页码-1)*每页的条数

                                          约束


约束的概念和分类
1.概念:
    约束是作用于表中列上的规则,用于限制加入表的数据
    约束的存在保证了数据库中数据的正确性,有效性和完整性
2.约束的分类
非空约束 ( 保证列中所有数据不能有null值 )            not null            
唯一约束 ( 保证列中所有数据各不相同 )             unique
主键约束 ( 主键是一行数据的唯一标识,要求非空且唯一 )   primary key      
检查约束 ( 保证列中的值满足某一条件 )            check
默认约束 ( 保存数据时,未指定值则采用默认值0)    default
外键约束 ( 外键用来让两个表的数据之间建立连接,保证数据的统一性和完整性)  foreign key
注:MySQL不支持检查约束
非空且唯一 : not null unique
自增长 : auto_increment   当列是数字类型,并且唯一约束
 
外键约束: foreign key (外键列名)   references 主表(主表列名)

表关系之一对多(多对一)
如:一个部门对应多个员工,多个员工对应一个部门
实现方式:在多的一方建立外键,指向一的一方的主键

表关系之多对多
如: 一个商品对应多个订单,一个订单包含多个商品
实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

表关系之一对一
    如:用户 和 用户详情
一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能
实现方式: 在任意一方加入外键,关联另一方主键,并且设置外键为唯一

                                    多表查询


内连接:    查询两张表的交集
隐式内连接:
select * from user ,emp where user.id=emp.id;
显示内连接:
select * from user join emp on user.id=emp.id;

外连接:    
左外连接:相当于查询A表所有数据和交集部分数据
select * from A left join B on user.id=emp.id;
右外连接:相当于查询B表所有数据和交集部分数据
select * from B left join A on user.id=emp.id;

                                         子查询:


        1.子查询根据查询结果不同,作用不同:


                    单行单列:    作为条件值,使用 = != > < 等进行条件判断
        select 字段列表 from 表 where 字段名 =(子查询)

                    多行单列: 作为条件值,使用in等关键字进行条件判断
                select 字段列表 from 表 where 字段名 in (子查询)

                    多行多列: 作为虚拟表
select 字段列表 from (子查询)  where 条件;

你可能感兴趣的:(sql,数据库)