mysql数据库:常用命令\表\SQL概述 (老杜)

目录

一、常用命令

二、数据库最基本单元(表)

三、SQL概述

四、导入数据:

五、查询表格数据:select * from

六、显示表格结构:desc   

七、简单查询

八、查询列起别名as

九、条件查询

十、排序

十一、综合案例


一、常用命令

        1.1show databases;                                       展示数据库

        1.2use ___(数据库名称);                               选择使用某个数据库

        1.3create database (bjpowernodes);     创建数据库

        1.4exit ctrl+c                                                     退出

        1.5show tables from ___;                                查看某个数据库下有哪些表

        1.6select database();                                        产看所在数据库

        1.7select version();                                           查看当前所用数据库版本号

        1.8create table stuinfo(      stuinfo(表名)

            id int,                               第一列id整型

            name varchar(20));         第二列name字符串型20字符串长度

                                                                                       创建表

        1.9desc  ____(表名);                                          查看表的结构 9(前提是先show tables)

       

注释:默认自带4个数据库

           分号为英文格式

           SQL语句不区分大小写

            无分号不执行,换行随意

            \c可中止(ctrl+c)

二、数据库最基本单元(表)

        2.1数据库以表存储数据,表是一种结构化文件

        2.2行(row):被称为数据\记录

        2.3列(column):被称为字段

        2.4主键(primary key):保证记录唯一性,主键可由一个多个字段组合构成一个唯一的构成部分;值具有唯一性他所在的字段不允许有重复,不允许取空值,每个表有且仅有一个主键。

        2.5外键(foreign key):数据库中至少有两张数据表,a表中为主键的字段,对于与他相连的表的同一个字段就是外键。

        2.6字段约束:表级字段约束,字段级约束,承担部分审核工作;

                2.6.1常见约束形式: 主键、外键、null和not null、unique、check(检查一个字段或整张表是否满足指定条件,不符合会被拒绝录入)、default(约束某字段的默认值)

注释:每个字段都有:字段名、数据类型、约束等类型。

          字段名:普通的名字。

          数据类型:字符串,数字,日期等  

          约束:通常设置某字段内不可重复

                             表中的某行记录唯一,一定不为全空或全部相同

三、SQL概述

        3.1分类

                3.1.1DQL:数据查询语言(带有select关键字的所有查询语句)

                3.1.2DML:数据操作语言(对表中的数据调整而非数据库)

                        insert

                        delete

                        upload

                3.1.3DDL:数据定义语言(对表结构进行调整)

                        create新建

                        drop

                        alter修改

                3.1.4TCL:事务控制语言

                        commit;事务提交

                        rollback;事务回滚

                3.1.5DCL:数据控制语言

                        grant:授权

                        revoke:撤销权限

                        ....

四、导入数据:

        导入sql文件:source D:/source/DU/mysql/bjpowernode.sql

        1)输入source

        2)打开目标文件文件夹

        3)拖拽

        create datebase 库名;---use 库名---source

        注释:路径无中文,\在编译语言中是转译需要修改为/或\\。

五、查询表格数据:select * from

    mysql> select*from dept;
    +--------+------------+----------+
    | DEPTNO | DNAME      | LOC      |
    +--------+------------+----------+
    |     10 | ACCOUNTING | NEW YORK |
    |     20 | RESEARCH   | DALLAS   |
    |     30 | SALES      | CHICAGO  |
    |     40 | OPERATIONS | BOSTON   |
    +--------+------------+----------+

    mysql> select * from emp;
    +-------+--------+-----------+------+------------+---------+---------+--------+
    | EMPNO | ENAME  | JOB       | MGR  | HIREDATE   | SAL     | COMM    | DEPTNO |
    +-------+--------+-----------+------+------------+---------+---------+--------+
    |  7369 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800.00 |    NULL |     20 |
    |  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600.00 |  300.00 |     30 |
    |  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250.00 |  500.00 |     30 |
    |  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975.00 |    NULL |     20 |
    |  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     30 |
    |  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850.00 |    NULL |     30 |
    |  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450.00 |    NULL |     10 |
    |  7788 | SCOTT  | ANALYST   | 7566 | 1987-04-19 | 3000.00 |    NULL |     20 |
    |  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000.00 |    NULL |     10 |
    |  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500.00 |    0.00 |     30 |
    |  7876 | ADAMS  | CLERK     | 7788 | 1987-05-23 | 1100.00 |    NULL |     20 |
    |  7900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950.00 |    NULL |     30 |
    |  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000.00 |    NULL |     20 |
    |  7934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 |    NULL |     10 |
    +-------+--------+-----------+------+------------+---------+---------+--------+

    mysql> select * from salgrade;
    +-------+-------+-------+
    | GRADE | LOSAL | HISAL |
    +-------+-------+-------+
    |     1 |   700 |  1200 |
    |     2 |  1201 |  1400 |
    |     3 |  1401 |  2000 |
    |     4 |  2001 |  3000 |
    |     5 |  3001 |  9999 |
    +-------+-------+-------+

六、显示表格结构:desc   

mysql> desc dept;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | DEPTNO | int(2)         | NO   | PRI | NULL    |       |        第一列
    | DNAME  | varchar(14) | YES  |     | NULL    |       |        第二列    
    | LOC    | varchar(13) | YES  |     | NULL    |       |            第三列
    +--------+-------------+------+-----+---------+-------+

    mysql> desc emp;
    +----------+-------------+------+-----+---------+-------+
    | Field    | Type        | Null | Key | Default | Extra |
    +----------+-------------+------+-----+---------+-------+
    | EMPNO    | int         | NO   | PRI | NULL    |       |员工编号
    | ENAME    | varchar(10) | YES  |     | NULL    |       |员工姓名
    | JOB      | varchar(9)  | YES  |     | NULL    |       |工作岗位
    | MGR      | int         | YES  |     | NULL    |       |上级编号
    | HIREDATE | date        | YES  |     | NULL    |       |入职日期
    | SAL      | double(7,2) | YES  |     | NULL    |       |工资
    | COMM     | double(7,2) | YES  |     | NULL    |       |补助
    | DEPTNO   | int         | YES  |     | NULL    |       |部门编号
    +----------+-------------+------+-----+---------+-------+

    mysql> desc salgrade;
    +-------+------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-------+------+------+-----+---------+-------+
    | GRADE | int  | YES  |     | NULL    |       |
    | LOSAL | int  | YES  |     | NULL    |       |
    | HISAL | int  | YES  |     | NULL    |       |
    +-------+------+------+-----+---------+-------+

    varchar            字符串
    date                日期
    double            带小数
    EMPNO            员工编号      
    ENAME            员工姓名  
    JOB                工作岗位      
    MGR                上级编号         
    HIREDAT            入职日期    
    SAL                工资           
    COMM            补助         
    DEPTNO            部门编号
    GRADE            工资等级
    LOSAL            最低工资
    HISAL            最高工资
    DEPTNO            部门编号
    DNAME            部门名字
    LOC                地理位置

七、简单查询

        7.1查询一个字段
            select字段名from表名;
            mysql> select job from emp;
            +-----------+
            | job       |
            +-----------+
            | CLERK     |
            | SALESMAN  |
            | SALESMAN  |
            | MANAGER   |
            | SALESMAN  |
            | MANAGER   |
            | MANAGER   |
            | ANALYST   |
            | PRESIDENT |
            | SALESMAN  |
            | CLERK     |
            | CLERK     |
            | ANALYST   |
            | CLERK     |
            +-----------+
        注释:select\from关键词
            字段名\表名标识符

        7.2查询两个或多个字段
            ,间隔
            mysql> select job,mgr from emp;
            +-----------+------+
            | job       | mgr  |
            +-----------+------+
            | CLERK     | 7902 |
            | SALESMAN  | 7698 |
            | SALESMAN  | 7698 |
            | MANAGER   | 7839 |
            | SALESMAN  | 7698 |
            | MANAGER   | 7839 |
            | MANAGER   | 7839 |
            | ANALYST   | 7566 |
            | PRESIDENT | NULL |
            | SALESMAN  | 7698 |
            | CLERK     | 7788 |
            | CLERK     | 7698 |
            | ANALYST   | 7566 |
            | CLERK     | 7782 |
            +-----------+------+
        7.3查询所有字段
            法一:写上所有字段
            法二:select * from dept;
                缺点:*转换为字段,效率低,可读性差,实际开发不推荐,可自己玩。


八、查询列起别名as

        情境一:正常修改
            法一:select 原字段1,原字段2 as 字段2新名 from 表名;
            法二:省略as(中间有空格即可)
            注释:显示的查询结果列名显示为字段2新名,原表列名未更改
                select语句不会修改操作(只负责查询)

                mysql> select job as job2,sal as sal2 from emp;
                +-----------+---------+
                | job2      | sal2    |
                +-----------+---------+
                | CLERK     |  800.00 |
                | SALESMAN  | 1600.00 |
                | SALESMAN  | 1250.00 |
                | MANAGER   | 2975.00 |
                | SALESMAN  | 1250.00 |
                | MANAGER   | 2850.00 |
                | MANAGER   | 2450.00 |
                | ANALYST   | 3000.00 |
                | PRESIDENT | 5000.00 |
                | SALESMAN  | 1500.00 |
                | CLERK     | 1100.00 |
                | CLERK     |  950.00 |
                | ANALYST   | 3000.00 |
                | CLERK     | 1300.00 |
                +-----------+---------+
        情境二:修改名称中含空格
            单引号:select 原字段1 '字段1新名' from 表名;
            双引号:同上。
            注释:Oracle数据库无法使用,单引号是数据库默认标准。
            mysql> select job as 'job 1' from emp;

                +-----------+
                | job 1     |
                +-----------+
                | CLERK     |
                | SALESMAN  |
                | SALESMAN  |
                | MANAGER   |
                | SALESMAN  |
                | MANAGER   |
                | MANAGER   |
                | ANALYST   |
                | PRESIDENT |
                | SALESMAN  |
                | CLERK     |
                | CLERK     |
                | ANALYST   |
                | CLERK     |
                +-----------+
        情景三:数据库的使用
            计算员工年薪sal*12
            注释:字段可以使用运算符,含中文使用''括起来。
                mysql> select ename ,sal*12 from emp;
                +--------+----------+
                | ename  | sal*12   |
                +--------+----------+
                | SMITH  |  9600.00 |
                | ALLEN  | 19200.00 |
                | WARD   | 15000.00 |
                | JONES  | 35700.00 |
                | MARTIN | 15000.00 |
                | BLAKE  | 34200.00 |
                | CLARK  | 29400.00 |
                | SCOTT  | 36000.00 |
                | KING   | 60000.00 |
                | TURNER | 18000.00 |
                | ADAMS  | 13200.00 |
                | JAMES  | 11400.00 |
                | FORD   | 36000.00 |
                | MILLER | 15600.00 |
                +--------+----------+
                ----------------------------
                mysql> select ename,sal*12 '年薪'from emp;
                +--------+----------+
                | ename  | 年薪     |
                +--------+----------+
                | SMITH  |  9600.00 |
                | ALLEN  | 19200.00 |
                | WARD   | 15000.00 |
                | JONES  | 35700.00 |
                | MARTIN | 15000.00 |
                | BLAKE  | 34200.00 |
                | CLARK  | 29400.00 |
                | SCOTT  | 36000.00 |
                | KING   | 60000.00 |
                | TURNER | 18000.00 |
                | ADAMS  | 13200.00 |
                | JAMES  | 11400.00 |
                | FORD   | 36000.00 |
                | MILLER | 15600.00 |
                +--------+----------+


九、条件查询

        语法:select
                字段1,字段2,...
            from
                表名
            where
                条件;

        9.1定义:查询符合条件的数据
        9.2条件分类:
            9.2.1等于=:
                查询薪资___800的员工编号与姓名
                mysql> select empno,ename from emp where sal=800;
                查询Smith的编号与薪资
                mysql> select empno ,sal from emp where ename ='smith';
                +-------+--------+
                | empno | sal    |
                +-------+--------+
                |  7369 | 800.00 |
                +-------+--------+
                注释:人名(字符串)外需要加单引号
            9.2.2不等于<>或!=:
                mysql> select empno,ename from emp where sal != 800;
                mysql> select empno,ename from emp where sal <> 800;

    
                +-------+--------+
            9.2.3小于<
                mysql> select empno,ename from emp where sal < 5000;
            
                +-------+--------+
            9.2.4小于等于<=
                mysql> select empno,ename from emp where sal <=5000;
            
                +-------+--------+
            9.2.5大于>
                mysql> select empno,ename from emp where sal>3000;
                
            9.2.6大于等于>=
                mysql> select empno,ename,sal from emp where sal>=3000;
                +-------+-------+---------+
                | empno | ename | sal     |
                +-------+-------+---------+
                |  7788 | SCOTT | 3000.00 |
                |  7839 | KING  | 5000.00 |
                |  7902 | FORD  | 3000.00 |
                +-------+-------+---------+
            9.2.7两个值之间between...and....或>=and<=
                查询薪资在2450与3000之间的员工信息
                法一:mysql> select empno,ename,sal from emp where sal between 2450 and 3000;
                法二:
                mysql> select empno,ename,sal from emp where sal >= 2450 and sal <= 3000;
                +-------+-------+---------+
                | empno | ename | sal     |
                +-------+-------+---------+
                |  7566 | JONES | 2975.00 |
                |  7698 | BLAKE | 2850.00 |
                |  7782 | CLARK | 2450.00 |
                |  7788 | SCOTT | 3000.00 |
                |  7902 | FORD  | 3000.00 |
                +-------+-------+---------+
                注释:
                法一:between须左小右大,闭区间,含两边值
                法二:and后面需要再次引出sal
                查询工作工位时manager且薪资大于2500的员工信息;
                mysql> select empno,ename,sal from emp where sal >2500 and job ='manager';
                +-------+-------+---------+
                | empno | ename | sal     |
                +-------+-------+---------+
                |  7566 | JONES | 2975.00 |
                |  7698 | BLAKE | 2850.00 |
                +-------+-------+---------+
            9.2.8判断条件为空null时
                失败:mysql> select empno,ename,sal from emp where comn = null;
                成功:mysql> select empno,ename,sal from emp where comn is null;
                注释:数据库中null代表无,不是其他编程语言中的值0,需要is\is not连接。
            9.2.9或者or
                查找工作岗位为manager或这salesman的员工信息
                mysql> select ename,empno,job from emp where job='salesman' or job='manager';
                +--------+-------+----------+ 
                | ename  | empno | job      |
                +--------+-------+----------+
                | ALLEN  |  7499 | SALESMAN |
                | WARD   |  7521 | SALESMAN |
                | JONES  |  7566 | MANAGER  |
                | MARTIN |  7654 | SALESMAN |
                | BLAKE  |  7698 | MANAGER  |
                | CLARK  |  7782 | MANAGER  |
                | TURNER |  7844 | SALESMAN |
                +--------+-------+----------+
            9.2.10and与or的优先级问题
                查询工资大于2500,并且部门编号为10或20部门的员工;
                错误:mysql> select ename,empno,sal from emp where sal > 2500 and deptno =10 or deptno =20;
                    含义:工资大于2500并且部门编号为10的,或者找出部门编号为20的;
                正确:小括号的优先级最高
                mysql> select ename,empno,sal from emp where sal > 2500 and (deptno =10 or deptno =20);
                +-------+-------+---------+
                | ename | empno | sal     |
                +-------+-------+---------+
                | JONES |  7566 | 2975.00 |
                | SCOTT |  7788 | 3000.00 |
                | KING  |  7839 | 5000.00 |
                | FORD  |  7902 | 3000.00 |
                +-------+-------+---------+
                注释:同时出现时and优先级大于or,需要or先执行或者优先级不明加入()即可。
            9.2.11包含in
                in 与多个or的用法相同:
                查询薪资为800或5000的员工信息:
                mysql> select * from emp where sal =800 or sal =5000;
                mysql> select * from emp where sal in (800,5000);

                +-------+-------+-----------+------+------------+---------+------+--------+
                | EMPNO | ENAME | JOB       | MGR  | HIREDATE   | SAL     | COMM | DEPTNO |
                +-------+-------+-----------+------+------------+---------+------+--------+
                |  7369 | SMITH | CLERK     | 7902 | 1980-12-17 |  800.00 | NULL |     20 |
                |  7839 | KING  | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL |     10 |
                +-------+-------+-----------+------+------------+---------+------+--------+
                注释:in指的时满足括号内相等的条件,并非一个区间
                not in:
                查询薪资不为800或5000的员工信息:
                mysql> select * from emp where sal not in(800,5000);
                查询工作不为salesman与manager的员工信息:
                +-------+--------+-----------+------+------------+---------+------+--------+
                | EMPNO | ENAME  | JOB       | MGR  | HIREDATE   | SAL     | COMM | DEPTNO |
                +-------+--------+-----------+------+------------+---------+------+--------+
                |  7369 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800.00 | NULL |     20 |
                |  7788 | SCOTT  | ANALYST   | 7566 | 1987-04-19 | 3000.00 | NULL |     20 |
                |  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL |     10 |
                |  7876 | ADAMS  | CLERK     | 7788 | 1987-05-23 | 1100.00 | NULL |     20 |
                |  7900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950.00 | NULL |     30 |
                |  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000.00 | NULL |     20 |
                |  7934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 | NULL |     10 |
                +-------+--------+-----------+------+------------+---------+------+--------+
        9.3模糊查询like
            9.3.1代表一个字符_
            9.3.2代表多个字符%
                注释:特殊字符可用转译符号\转译;
            找出名字中带有o的?
            mysql> select ename from emp where ename like '%o%';
                    +-------+
                    | ename |
                    +-------+
                    | JONES |
                    | SCOTT |
                    | FORD  |
                    +-------+
            找出名字以T结尾的?
            select * from emp where ename like '%T';
            找出名字第二个字母是A的?
            select * from emp where ename like '_A%';
            找出第三个字母是R的?
            select * from emp where ename like '__R%';
            特别的:
            找出名字中有_的?
            select * from emp where ename like '%\_%';
                注释:查找的转译字符外记得加上单引号!


十、排序

        10.1单一字段排序
            语法:select 
                    ename,sal
                from
                    emp
                order by
                    sal;

            注释:默认情况下即是升序;

        10.2手动指定排序
            指定降序:
                select
                    ename,sal
                from
                    emp
                order by
                    sal desc;

            指定升序:
                select
                    ename,sal
                from
                    emp
                order by
                    sal asc;

        10.3多字段排序
            查询员工薪资和名字,要求薪资升序,如薪资相同的情况下按照名字升序排列:
            select
                sal,ename
            from
                emp
            order by
                sal asc,ename asc;

            注释:此处sal占主导位置,ename 可能起作用也可能不起作用;
        10.4使用字段位置排序
            select sal,ename from emp order by 2;
            注释:2表示第二列
                但开发中不推荐此写法,不健壮;列的顺序容易发生改变;


十一、综合案例

        查询工资1250到3000之间的员工信息,要求按照薪资降序排列:
            select * from emp where sal between 1250 and 3000 order by sal desc; 
            执行顺序:from--where--select--order by(排序总是最末)
            注释:关键词的顺序不可更替

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值