mysql基础

数据库
    mysql基础
    1、sql分类    
        DQL      数据查询语言
                    select
        dml      数据操作语言
                    insert
                    delete
                    updata
        ddl         数据定义语言
                    ddl主要操作的是表的结构 不是表的数据
                    create  创建表
                    drop    删除表
                    alter    修改表
        tcl        事务控制语言
                    包括:事务提交和事务回滚 commit rollback
        dcl        数据控制语言
                    授权grant 撤销权限revoke

    2、常用命令:  注意:不见分号不执行
                show database; 显示数据库
                show table;        显示表
                select database;    显示当前数据库
                \c用来终止一条命令的执行
                exit             退出mysql
                
    3、数据库查询
        1、select  字段名 from 表名      查询表
        2、desc    表名                 查询表结构
        3、varchar就是java中的string
        4、注意:所有的sql语句是通用的,以分号结尾
        sql语句不区分大小写
        5、查询两个字段:
            使用分号隔开即可
        6、给查询的列起别名:
            1、as关键字
            2、select xuehao,name as xuehaoname from student;
            3、注意:这是给显示的显示结果进行的起别名!
                    表本身不会改变,只是自己看到了变化了
                    记住:select永远不会修改了表的数据  只用于查询
            4、as关键字可以省略;
                假设别名里面有空格?
                    不做处理的时候  编译报错
                    解决办法  单引号或者双引号括起来;单引号更加通用,奥瑞克就用不了双引号
                    注意 :sql语句的标准语句是单引号
        7、可以在结果上进行乘法
            select name sal*12 from stu;   可以进行年薪的计算
            select name sal*12 as yearsal from stu;  起别名
            别名是中文的需要用单引号括起来
            select name sal*12 as '年薪' from stu;
        8、条件查询
            select
            ...字段,字段,字段
            from
            ...表名
            where
            ...条件
            
            1、条件详细
                1、注意不等号:<>或者!=
                select name sal from stu where sal < 2000; 
                2、多条件:    用and连接
                            在什么和什么之间:between and
                            注意:在使用between and的时候  注意必须是左小右大  
                                    并且是闭区间
                3、判空
                    is null  不能使用=  必须是is或者is not
                4、 or 并集  只满足一个
                    and 交集 两个都满足
                    同时出现时,and 的优先级比or高  
                                先执行and 再执行or
                                所以应加括号
                5、in  他不是一个区间  他是一个具体的值
                
                    select name sal from stu where sal in (800,5000);
                    他只会输出800和5000的值
                    select name sal from stu where sal in (800,5000,11111);
                    他只会输出800和5000和11111的值
                    区间的语句是between and
                6、not in  就是不是这几个值的
                7、模糊查询
                    % _  都是特殊字符
                    %任意多个字符
                    _任意一个字符
                    
                    例如:  以g开头的 ‘g%’
                            以n结尾的 ‘%n’
                            第二字母是a的 ‘_a%’
                            注意:名字中有_的怎么办?  
                                    加\  ‘%\_%’
                                    但是别写成‘%_%’
        9、排序
            1、select
                ...字段,字段,字段
                from
                ...表名
                order by
                sal
                        默认是升序
            2、指定降序:
                select
                ...字段,字段,字段
                from
                ...表名
                order by
                sal desc
            3、指定升序
                select
                ...字段,字段,字段
                from
                ...表名
                order by
                sal esc
            4、多字段排序
                select
                ...字段,字段,字段
                from
                ...表名
                order by
                sal esc,name esc;
                先按照薪资进行排序 再按照名字进行拍寻
                只有薪资相等的时候  才启动后续排序
            5、按照字段位置排序:
                select
                ...字段,字段,字段
                from
                ...表名
                order by
                2;
                不建议这样写  不健壮
                因为列的顺序很容易发生变化
            6、关键字顺序:
                select
                ...字段,字段,字段
                from
                ...表名
                where
                ...条件
                order by
                sal esc,name esc;
                
                注意先进行查询  再进行排序
                (排序总是在最后执行)
    4、数据处理函数
        1、数据处理函数又被称为单行处理函数
            特点:一个输入对应一个输出
            相对的就是多行处理函数:多个输入对应1个输出
        2、单行处理函数有哪些呢
            lower lower(name) 转成小写
            upper 转成大写
            substr 取字符串的一部分
                substr(被截取的字符串,起始下标,截取的长度)
                注意:起始下标从1开始
                    select
                    ...字段,字段,字段
                    from
                    ...表名
                    where
                    substr(name,1,1)='A';
                    第一个字母大写的
                
            length 取长度
            trim    去除前后空白的
            
            select rand() from 表名 生成随机数
    5、多行处理函数
            5个:
                count   计数
                max        最大
                min        最小
                sum        求和
                avg        平均值
                
            select max(sal) from 表名
        1、注意:   1、分组函数自动忽略null 例如count在计数的时候就不会计算在内 不需要对null进行处理
                        记住null他不是一个值 他代表什么也没有
                    2、分组函数不能使用在where子语句当中
        2、分组查询可以一起用
        3、分组查询(非常重要):
                select
                ...字段,字段,字段
                from
                ...表名
                where    
                条件
                group by
                ...
                order by
                ...
                注意顺序不能颠倒
                
                执行顺序:  1、from         最终要展现的字段
                            2、where     条件
                            3、group by  根据条件进行分组  参数为执行对象
                                3.1having 对where无法进行过滤的进行进一步过滤 尤其是有分组函数的操作
                            4、select     等前面分好组之后再查询    
                            5、order by  排序肯定是最后的
                    分组函数再使用的时候必须再分组之后才能使用
                    所以where后面不能出现分组函数
                    
            重要结论!:
                    当sql语句当中有group by 语句的时候 ,
                    select的后面  只能跟 参加分组的字段和分组函数!
                    其他的一律不能跟  但是可能一些软件不会报错 而且也没有意义
                    eg:select
                        job,max(sal)
                        from
                        stu
                        group by
                        job;
                        
                    而不能
                        select
                        job,name,max(sal)
                        from
                        stu
                        group by
                        job;
                        
                技巧:
                    两个字段连成一个字段看
                    联合起来分组不就成两个组了吗
                        select
                        job,name,max(sal)
                        from
                        stu
                        group by
                        job,xuehao;
                        
            4、having可以对分组进行进不去过滤
            但是having不能单独使用
            必须和group by一起使用
            不能代替where
            2、但是优先选择where  实在解决不了的再用having
            例如:
                        select
                        xuehao,avg(sal)
                        from
                        stu
                        group by
                        xuehao
                        having
                        avg(sal)>2500;
                        此时就不能使用where了
                        因为where后面无法使用分组函数
        
        6、    把查询结果去除重复记录
                distinct 所有字段联合起来去除重复记录
                注意:只能出现在字段的最前方
        7、连接查询:
                跨表查询  多表联合查询
                1、分类:
                    年代分类    sql92
                                sql99
                    表连接的方式分类
                        内连接
                            等值连接
                            非等值连接
                            自连接
                        外连接    
                            左外连接(左连接)
                            右外连接(右连接)
                        全连接
                2、两张表连接  没有任何的条件限制
                    怎么避免笛卡尔积的现象?
                        select
                        stu.ename,stu2.dname
                        from
                        stu,stu2
                        where
                        stu.xuehao =stu2.xuehao 
                        可以起别名
                        
                        select
                        e.ename,d.dname
                        from
                        e stu,d stu2
                        where
                        e.xuehao =d.xuehao
                        
                3、内连接之等值连接
                        select
                        e.ename,d.dname
                        from
                        stu e join stu2 d
                        on
                        e.xuehao =d.xuehao
                        1、带着inner可读性更好
                        2、为什么是等值连接呢  
                            条件是一个等量关系
                4、内连接之非等值连接
                        select
                        e.ename,d.dname,e.sal
                        from
                        e stu
                        join
                        d stu2
                        in
                        e.xuehao betweend e.sal and d.sal;
                5、内连接之自连接
                        a领导的员工编号等于b员工的领导编号
                    一张表看成两张表
                6、外连接
                        内连接的特点:完全能匹配到条件的查询出来
                        外连接            没匹配上的也显示出来
                        select
                        e.ename,d.dname
                        from
                        stu e right join stu2 d
                        on
                        e.xuehao =d.xuehao
                        (右连接)right代表  这个表是主表
                                他会把主表的剩余内容捎带显示出来
                                把左表捎带显示出来了
                                
                        他给a,b两张表出来了一个主次关系
                        select
                        e.ename,d.dname
                        from
                        stu e left join stu2 d
                        on
                        e.xuehao =d.xuehao
                        
                        主表就是jion的左右
                        
                        可以通过right和left来区分外连接和内连接
                        
                        全连接就是ab两个都是主表
                            很少用
                    7、三张表连接
                        select
                            。。。
                        from
                            a
                        join
                            b
                        on
                            a和b的连接条件
                        join
                            c
                        on
                            a和c的连接条件
                        join
                            d
                        on
                            a和d的连接条件
                            
                        一个sql语句当中可以内连接和外连接混合  都可以出现
                        
                        
                        
                        
                        
                        
                        
        8、子查询
                被嵌套的select语句被称为子查询
            1、可以出现在哪里呢
                select
                ...(select)
                from
                ...(select)
                where
                ...(select)
        9、union
            要求     前后返回的两个表的列数相同
                        也就是字段数相同
                    数据类型相同
        10、limit
                1、将查询结果集的一部分取出来
                通常使用在分页当中
                2、分页的作用是什么?
                    提高用户体验
                3、select
                ...(select)
                from
                ...(select)
                where
                ...(select)
                limit 5;
                取前5
                参数 startindex length
                一个参数:取前几
                注意:limit必须写在order by之后
        11、select
                ...(select)
                from
                ...(select)
                where
                ...(select)
                limit 4,5;
                第[5,9]的员工
        12、分页
                第1页  limit 0,3         [0,1,2]
                第2页  limit 3,3         [3,4,5]
                第3页  limit 6,3        [6,7,8]
                第4页  limit 9,3        [9,10,11]
                
                第n条
                    limit (n-1)*3,3
        13、表
                1、表的创建
                    属于ddl
                    creat table 表名(
                        字段名1,数据类型,
                        字段名2,数据类型,
                        字段名3,数据类型,
                        字段名4,数据类型,
                            )
                    表名:建议以t_开头  或者以tbl_开头
                    字段名:见名知意
                    
                    
                2、数据类型、
                    varchar:255
                        可变的长度
                        都按实际的长度分配 
                        但是节省空间速度慢
                    char:255
                        不可变的长度
                        都按分配的长度分配 不管实际长度
                        但是浪费资源速度快
                    int11
                    bigint
                    float
                    double
                    date    短日期
                    datetime 长日期
                    clob        字符大对象(4G  比如大文章)
                    blob        二进制大对象(图片 声音 视频)
                        需要用流的方式进行
                3、
                    删除表    
                        drop 表名;
                        drop 表名 if exists;
                        
                    插入数据
                        insert into 表名(字段1,字段2,字段3) value(值1,值2,值3);
                        字段和值要一一对应
                4、数据库的命名规范
                    所有的标识符全部小写
                    单词和单词之间用下划线连接
                5、date
                    str_to_date函数可以把字符串varchar转换成date数据类型
                    通常用在insert  因为此时要假如数据类型
                    但是假如写的是年月日的格式  mysql会自动进行类型转换
                6、date_format
                    将日期类型进行特定的格式
                    select id,name,date_format(birth,'%m/%d') as birth from 表名
                    
                    通常使用在查询方面  设置展示的日期格式
                    但是直接查询时 他会显示标准的格式类型
                7、长日期类型
                    加上时分秒
        14、update
                改
                    属于dml
                    update 表名 set 字段名=值 where 条件;
                    注意数据类型对应
        15、删除 delete
                属于dml
                    delet 表名 where 条件;
                    注意加条件  不然全部删除了
                
        16、插入多条记录
            insert into 表名(字段1,字段2,字段3)values 
                                (值1,值2,值3),
                                (值1,值2,值3),
                                (值1,值2,值3);
        17、快速复制表
            creat table stu2 as select * from stu1;
            原理就相当于重新创建了一个新的表
        18、查询一部分呢进行复制
            creat table stu2 as select id name from stu1 where id=1;
        19、
            快速删除表中数据
            delete from stu;    删除方式比较慢 但是还可以回滚     属于dml
            truncat table stu ; 删除方式快 但是不支持回滚           属于ddl
            
            注意上面时删除表数据,但是表还在
                    删除表是drop table 表名;
                    
                        
                
                    
                        
                        
                        
                        
                        
                        
                        

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值