mysql学习笔记1

1、Sql:结构化查询语言
        程序员需要学习SQL语句,程序员通过编写SQL语句,然后DBMS负责执行SQL语句,
        最终来完成数据库中数据的增删改查功能。
   三者之间的关系:
        DBMS-->执行-->SQL-->操作-->DB(存储数据的仓库)

2、SQL常用命令
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.00 sec)

    mysql> CREATE DATABASE nanjing;
    Query OK, 1 row affected (0.00 sec)
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | nanjing            |
    | performance_schema |
    | sys                |
    +--------------------+
    5 rows in set (0.00 sec)

    mysql> use mysql;
    Database changed
    mysql> show tables;
    +---------------------------+
    | Tables_in_mysql           |
    +---------------------------+
    | columns_priv              |
    | db                        |
    | engine_cost               |
    | event                     |
    | func                      |
    | general_log               |
    | gtid_executed             |
    | help_category             |
    | help_keyword              |
    | help_relation             |
    | help_topic                |
    | innodb_index_stats        |
    | innodb_table_stats        |
    | ndb_binlog_index          |
    | plugin                    |
    | proc                      |
    | procs_priv                |
    | proxies_priv              |
    | server_cost               |
    | servers                   |
    | slave_master_info         |
    | slave_relay_log_info      |
    | slave_worker_info         |
    | slow_log                  |
    | tables_priv               |
    | time_zone                 |
    | time_zone_leap_second     |
    | time_zone_name            |
    | time_zone_transition      |
    | time_zone_transition_type |
    | user                      |
    +---------------------------+
    31 rows in set (0.00 sec)

    mysql> select *from db;
    +-----------+--------------------+---------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+------------------+----------------+---------------------+--------------------+--------------+------------+--------------+
    | Host      | Db                 | User          | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Create_tmp_table_priv | Lock_tables_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Execute_priv | Event_priv | Trigger_priv |
    +-----------+--------------------+---------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+------------------+----------------+---------------------+--------------------+--------------+------------+--------------+
    | localhost | performance_schema | mysql.session | Y           | N           | N           | N           | N           | N         | N          | N               | N          | N          | N                     | N                | N                | N              | N                   | N                  | N            | N          | N            |
    | localhost | sys                | mysql.sys     | N           | N           | N           | N           | N           | N         | N          | N               | N          | N          | N                     | N                | N                | N              | N                   | N                  | N            | N          | Y            |
    +-----------+--------------------+---------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+------------------+----------------+---------------------+--------------------+--------------+------------+--------------+
    2 rows in set (0.00 sec)

    mysql> desc db;
    +-----------------------+---------------+------+-----+---------+-------+
    | Field                 | Type          | Null | Key | Default | Extra |
    +-----------------------+---------------+------+-----+---------+-------+
    | Host                  | char(60)      | NO   | PRI |         |       |
    | Db                    | char(64)      | NO   | PRI |         |       |
    | User                  | char(32)      | NO   | PRI |         |       |
    | Select_priv           | enum('N','Y') | NO   |     | N       |       |
    | Insert_priv           | enum('N','Y') | NO   |     | N       |       |
    | Update_priv           | enum('N','Y') | NO   |     | N       |       |
    | Delete_priv           | enum('N','Y') | NO   |     | N       |       |
    | Create_priv           | enum('N','Y') | NO   |     | N       |       |
    | Drop_priv             | enum('N','Y') | NO   |     | N       |       |
    | Grant_priv            | enum('N','Y') | NO   |     | N       |       |
    | References_priv       | enum('N','Y') | NO   |     | N       |       |
    | Index_priv            | enum('N','Y') | NO   |     | N       |       |
    | Alter_priv            | enum('N','Y') | NO   |     | N       |       |
    | Create_tmp_table_priv | enum('N','Y') | NO   |     | N       |       |
    | Lock_tables_priv      | enum('N','Y') | NO   |     | N       |       |
    | Create_view_priv      | enum('N','Y') | NO   |     | N       |       |
    | Show_view_priv        | enum('N','Y') | NO   |     | N       |       |
    | Create_routine_priv   | enum('N','Y') | NO   |     | N       |       |
    | Alter_routine_priv    | enum('N','Y') | NO   |     | N       |       |
    | Execute_priv          | enum('N','Y') | NO   |     | N       |       |
    | Event_priv            | enum('N','Y') | NO   |     | N       |       |
    | Trigger_priv          | enum('N','Y') | NO   |     | N       |       |
    +-----------------------+---------------+------+-----+---------+-------+
    22 rows in set (0.01 sec)

    mysql> select version();
    +-----------+
    | version() |
    +-----------+
    | 5.7.41    |
    +-----------+
    1 row in set (0.00 sec)

    mysql> select database();
    +------------+
    | database() |
    +------------+
    | mysql      |
    +------------+
    1 row in set (0.00 sec)


3、数据库中最基础的单元是表(类似Excel),为啥用表存储数据?
        直观
4、SQL语句的分类:
    DQL(Data Query Language):数据查询语言(凡是带有select关键字的都是查询语句)
         select * from 表名;
    DML(Data Manipulation Language):数据操作语言(凡是对表中的数据进行增删改的都是DML)
        insert delete update
        insert 增
        delete 删
        update 改
        以上主要时操作表中的data
    DDL(Data Definition Language)):数据定义语言
        凡是带有create、drop、alter的都是DDL。
        DDL主要操作的是表的结构,非表的数据。
        create:新建,等同于增。
        drop:删除
        alter:修改
        以上是对表结构进行操作。
    TCL(Transaction Control Language):事务控制语言
        commit:事务提交
        rollback:事务回滚
    DCL(Data Control Language):数据控制语言。
        例如:grant:授权
             revoke:撤销权限
5、DQL:
    mysql> desc db;
    mysql>  select Host from db; //一个字段
    +-----------+
    | Host      |
    +-----------+
    | localhost |
    | localhost |
    +-----------+
    2 rows in set (0.00 sec)

    mysql> select host,user from db;//多个字段,用","隔开。
    +-----------+---------------+
    | host      | user          |
    +-----------+---------------+
    | localhost | mysql.session |
    | localhost | mysql.sys     |
    +-----------+---------------+
    2 rows in set (0.00 sec)

    mysql>  select * from db;  //效率较低,可读性差。
    +-----------+--------------------+---------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+------------------+----------------+---------------------+--------------------+--------------+------------+--------------+
    | Host      | Db                 | User          | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Create_tmp_table_priv | Lock_tables_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Execute_priv | Event_priv | Trigger_priv |
    +-----------+--------------------+---------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+------------------+----------------+---------------------+--------------------+--------------+------------+--------------+
    | localhost | performance_schema | mysql.session | Y           | N           | N           | N           | N           | N         | N          | N               | N          | N          | N                     | N                | N                | N              | N                   | N                  | N            | N          | N            |
    | localhost | sys                | mysql.sys     | N           | N           | N           | N           | N           | N         | N          | N               | N          | N          | N                     | N                | N                | N              | N                   | N                  | N            | N          | Y            |
    +-----------+--------------------+---------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+------------------+----------------+---------------------+--------------------+--------------+------------+--------------+
    2 rows in set (0.00 sec)

    mysql> select Host,Db as hb from db; //改名(若名字中有空格/中文,用单引号括起来)---只是修改的查询不改变原来的表名。
    +-----------+--------------------+
    | Host      | hb                 |
    +-----------+--------------------+
    | localhost | performance_schema |
    | localhost | sys                |
    +-----------+--------------------+
    2 rows in set (0.01 sec)

    字段可以使用字段表达式。
6、条件查询(where)
    mysql> select host,DB from db where DB='sys';
    +-----------+-----+
    | host      | DB  |
    +-----------+-----+
    | localhost | sys |
    +-----------+-----+
    1 row in set (0.00 sec)

    mysql> select host,DB from db where DB!='sys';
    +-----------+--------------------+
    | host      | DB                 |
    +-----------+--------------------+
    | localhost | performance_schema |
    +-----------+--------------------+
    1 row in set (0.00 sec)
    若为null的话,使用 is null。
    并列条件用or。
    and和or同时出现,and优先级高。(相同字段用or,不同字段用and)
    in:对象(not)in(条件一,条件二,...)    相当于多个or
模糊查询:like。
    %:任意多个字符
    _: 任意一个字符
   对象 like '_a%',找出第二个字母以a开头的。
        若找出其中有下划线的,采用'%\_%'。
7、排序
    mysql> select user,table_scans from x$user_summary order by user desc;
    +------------+-------------+
    | user       | table_scans |
    +------------+-------------+
    | root       |          11 |
    | background |           0 |
    +------------+-------------+
    2 rows in set (0.01 sec)

    mysql> select user,table_scans from x$user_summary order by user;
    +------------+-------------+
    | user       | table_scans |
    +------------+-------------+
    | background |           0 |
    | root       |          12 |
    +------------+-------------+
    2 rows in set (0.01 sec)

    mysql> select user,table_scans from x$user_summary order by table_scans;
    +------------+-------------+
    | user       | table_scans |
    +------------+-------------+
    | background |           0 |
    | root       |          13 |
    +------------+-------------+
    2 rows in set (0.01 sec)
8、数据处理函数
    单行处理函数(一对一处理)和多行处理函数(多对一处理)
    lower 小写}        +(对象)
    upper 大写}
    substr(对象,起始位置(1默认开始),截取长度),可用于模糊查询
    concat函数   字符串拼接   concat(对象一,对象二)
    length 长度
    trim   去空格
   select后面可以跟某个表的字段名(可以等同看作变量名),也可以跟字面值/字面量(同样可看作为数据)
   eg. select round(1234.567,0) as num from emp;     保留整数
    rand()生成随机数
    ifnull ,数据库中只要有NULL参与的运算结果就为null。为了避免,使用ifnull,方法为ifnull(数据,被当作那个值)。


    case...when...then...when...then...else...end
  注释(if(           )      elseif(  )    else()    )

9、多行处理函数(也叫分组函数)
    count
    sum
    avg
    min
    max
    使用之前必须分组,不分组默认为一组数据。同时,分组函数自动忽略null。
    所有的分组函数都可以组合起来用:select sum(sal),min(sal),max(sal),count(*) from emp;
10、分组查询
    select job,sum(sal) from emp group by job;
    在一条select语句中,如果存在group by的话,Select后面只能跟参加分组的字段,分组函数。其他一定不能跟。
11、大总结
     select
     。。。
     from
     。。。
     where
     。。。
     group by
     ...
     having
     ...
     order by
     ...
     执行顺序:1、from 2、where 3、group by 4、having 5、select 6、order by
     eg.
    select
    job,avg(sal) as avgsal
    from
    emp
    where
    job <> 'MANAGEAR'
    group by
    job
    order by
    avgsal desc;
12、distinct只能出现所有字段的最前方,表示去除所有字段(并的关系)的重复。
    count(distinct job),并列
13、连接查询
        从多张表中联合查询数据
    分类:内连接:等值连接
                非等值连接
                自连接
         外连接:左外连接(左连接)
                右外连接(右连接)
         全连接(不讲)
14、避免笛卡尔积现象要加条件
        select e.name,d.dname from emp e,dept.d where e.deptno = d.deptno;
15、内连接之等值连接
    SQL99
    select
        e.name,d.dname
    from
        emp e
    (inner) join
        dept d
    on
        e.deptno=d.deptno
    where ....
16、内连接之非等值连接
    on ... between ... and ...
17、内连接之自连接

18、外连接
一张表是主表
    select
        e.name,d.dname
    from
        emp e
    left (outer) join
        dept d
    on
        e.deptno=d.deptno
19.子查询
where子查询
    select
    ename,sal
    from
    emp
    where
    sal>(select min(sal) from emp);
from子查询
    可以将子查询的查询结果当成一张临时表
     select
     t.*,s.grade
     from
     (select job,avg(sal) as avgval from emp group by job) t
     join
     salgrade s
     on
     t.avgval between s.losal and s.hisal;
select子查询
    了解
20.Union用法
    select ename,job from emp where job='MANAGER'
    union
    select ename,job from emp where job='MANAGER';
    优点:表连接次数减少,时间复杂度提升

21、limit(*****)
    作用:将查询结果集的一部分取出来。通常使用在分页查询当中。
    类似百度网页:一页显示10条记录。
    提高用户体验
    完整用法:limit startIndex,length(缺省默认从零开始)
    select ename,sal from emp order by sal desc limit 0,5;//显示前5条记录
    ***优先级:limit在order by后面执行
 分页:limit (pageno-1)*pagesize,pagesize

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天是蓝的嘛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值