MySQL笔记1

1、什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么?
    数据库:英文单词DataBase,简称DB。数据库是按照一定格式存储数据的一些文件的集合。
        顾名思义:存储数据的仓库,实际上就是一堆文件,这些文件中存储了具有特定格式的数据。
        数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
    数据库管理系统:
        DataBaseManagementSystem,简称DBMS。
        数据库管理系统是专门用来管理数据库中的数据的,
        数据库管理系统可以对数据库当中的数据进行增删改查。
        常见的数据库管理系统:MySQL、Oracle、SQLServer...等
    SQL:结构化查询语言(Structured Query Language)
        程序员需要学习SQL语句,程序员负责编写SQL语句,然后DBMS负责执行SQL语句,
        最终来完成数据库中数据的增删改查。
        SQL是一套标准,程序员主要学习的就是SQL语句,这个SQL在mysql中可以使用,同时也可以在oracle中使用。
    三者之间的关系:
        DBMS执行SQL语句操作DataBase。
    先安装数据库管理系统MySQL,然后学习SQL语句怎样编写,编写SQL语句之后DBMS执行SQL语句,最终完成数据库的数据管理。        
2、端口号:端口号是port,任何一个软件都有端口号,端口号是软件的唯一标识。
           端口号通常和IP地址在一块,IP地址用来定位计算机的,端口号port是用来定位计算机上的某个服务/某个应用的!在同一台计算机上端口号不可能重复。
           MySql数据库启动的时候,这个服务占有的默认端口号是3306.
3、MySQL启动类型是“自动启动”,自动启动表示下一次重启操作系统的时候,自动启动该服务。
4、在Windows操作系统当中怎样使用命令来启动和关闭MySQL服务呐?
    语法结构:
        net stop 服务名称; 关闭服务
        net start 服务名称; 开启服务
   在Windows中其他服务的启停也都可以采用以上的命令。
5、MySQL安装了,服务启动了,怎样使用命令提示符登录MySQL数据库呐?使用bin目录下的mysql.exe来连接数据库服务器。
    在命令提示符中输入:
        【显示编写密码的方式登录】
        mysql -uroot -p123456 或者
        mysql.exe -uroot -p123456【root是用户名,123456是密码】
        【隐藏密码的方式登录】
        mysql -uroot -p 【敲回车】Enter password:****** 【******是密码】
        mysql.exe -uroot -p 【敲回车】Enter password:****** 【******是密码】
6、MySQL的常用命令:【输入命令的时候不区分大小写】
    exit; 用于退出
    show databases; 查看有那些数据库[以;结尾,分号必须是英文的]
    show tables; 查看某个数据库下有那些表
    use 数据库名; 使用数据库
    create database 数据库名; 创建数据库
    drop database 数据库名; 删除数据库
7、数据库当中,最基本的单元是表:
    什么是表table?为什么用表来存储数据?
        数据库当中是以表格的形式表示数据的,因为比较直观.
        任何一张表都有行和列.
        行(row):被称为数据/记录.
        列(column):被称为字段.
8、每一个字段都有:字段名、数据类型、约束...等属性
    字段名:见名知意就行。
    数据类型:字符串,数字,日期等。
    约束:约束也有很多,其中一个叫做唯一性约束,这种约束添加之后,该字段中的数据不能重复。

SQL语句的分类
1、SQL语句分为一下几种:
    DQL:Data Query Language,数据查询语言
        凡是带有select关键字的都是查询语句。
        select...
    DML:Data Manipulation Language,数据操作语言。
        凡是对表当中的数据进行增删改的都是DML。
        insert(增) delete(删) update(改)
        DML主要操作表中的数据。
    DDL:Data Denifition Language,数据定义语言
        凡是带有create、drop、alter都是DDL
        DDL主要操作的是表的结构。
    TCL:Trasactional Control Languag,事务控制语言
        包括:
            事务提交:commit;
            事务回滚:rollback;
    DCL:Data Control Language,数据控制语言
        例如:授权grant、撤销权限revoke。

导入数据
1、使用source命令:语法结构: 
        “source sql文件路径”
            mysql> source D:\Users\XueYingHao\MySQL\bjpowernode.sql
2、    查看数据库中的表:
    【重点】show tales;
    mysql> show tables;
    +-----------------------+
    | Tables_in_bjpowernode |
    +-----------------------+
    | dept                  | dept是部门表
    | emp                   | emp是员工表
    | salgrade              | salgrade是工资等级表
    +-----------------------+
3、查看表中的数据:
    SLQ语句: 
    【重点】select * from 表名;
4、查看表数据:
    【重点】select * from 表名;【*代表查看表中所有的字段】
    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 dept;
    +--------+------------+----------+
    | DEPTNO | DNAME      | LOC      |
    +--------+------------+----------+
    |     10 | ACCOUNTING | NEW YORK |
    |     20 | RESEARCH   | DALLAS   |
    |     30 | SALES      | CHICAGO  |
    |     40 | OPERATIONS | BOSTON   |
    +--------+------------+----------+
    mysql> select * from salgrade;
    +-------+-------+-------+
    | GRADE | LOSAL | HISAL |
    +-------+-------+-------+
    |     1 |   700 |  1200 |
    |     2 |  1201 |  1400 |
    |     3 |  1401 |  2000 |
    |     4 |  2001 |  3000 |
    |     5 |  3001 |  9999 |
    +-------+-------+-------+
5、查看表结构: 
    【重点】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(4)      | NO   | PRI | NULL    |       | 员工编号
    | ENAME    | varchar(10) | YES  |     | NULL    |       | 员工姓名
    | JOB      | varchar(9)  | YES  |     | NULL    |       | 工作岗位
    | MGR      | int(4)      | YES  |     | NULL    |       | 上级编号
    | HIREDATE | date        | YES  |     | NULL    |       | 入职时间
    | SAL      | double(7,2) | YES  |     | NULL    |       | 工资
    | COMM     | double(7,2) | YES  |     | NULL    |       | 津贴,补助
    | DEPTNO   | int(2)      | YES  |     | NULL    |       | 部门编号
    +----------+-------------+------+-----+---------+-------+
    
    mysql> desc salgrade;
    +-------+---------+------+-----+---------+-------+
    | Field | Type    | NuLL | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | GRADE | int(11) | YES  |     | NULL    |       | 工资等级
    | LOSAL | int(11) | YES  |     | NULL    |       | 最低工资
    | HISAL | int(11) | YES  |     | NULL    |       | 最高工资
    +-------+---------+------+-----+---------+-------+
6、    【重点】select version(); 查看mysql数据库的版本号
    mysql> select version();
    +------------+
    | version()  |
    +------------+
    | 5.7.29-log |
    +------------+
7、【重点】select database();用于查看当前使用的数据库的名字
    mysql> select database();
    +-------------+
    | database()  |
    +-------------+
    | bjpowernode |
    +-------------+
8、MySQL是不见分号不执行,分号表示结束。
   “\c”用来终止一条命令的输入。
9、所有的SQL语句以“;”结尾。
    SQL语句不区分大小写:大写小写都一样。【关键字和标识符都不区分大小写】
10、查看数据库文件在电脑上的那个位置:
    mysql> show variables like '%datadir%';
    +---------------+---------------------------------------------+
    | Variable_name | Value                                       |
    +---------------+---------------------------------------------+
    | datadir       | C:\ProgramData\MySQL\MySQL Server 5.7\Data\ |
    +---------------+---------------------------------------------+
   

简单查询语句
1、查询一个字段?
    【重点】select 字段名 from 表名;
        其中要注意:
            select和from都是关键字
            字段名和表名都是标识符。
    示例:查询部门的名字【因为部门的名字在部门表中,所以表名是“dept”,dname字段存储的是部门的名字,所以字段名是“dname”】
        mysql> select dname from dept;
        +------------+
        | dname      |
        +------------+
        | ACCOUNTING |
        | RESEARCH   |
        | SALES      |
        | OPERATIONS |
        +------------+
2、查询多个字段:用逗号隔开。
        【重点】select 字段名1,字段名2.... from 表名;
        【重点】select 字段名1[,字段名2,....] from 表名;【“[]”中的内容代表可有可无】
    示例:查询部门编号和部门名字
        mysql> select deptno,dname from dept;
        +--------+------------+
        | deptno | dname      |
        +--------+------------+
        |     10 | ACCOUNTING |
        |     20 | RESEARCH   |
        |     30 | SALES      |
        |     40 | OPERATIONS |
        +--------+------------+
3、查询所有字段:
    第一种方式:可以把每个字段都写上;
        【重点】select 所有字段名(中间用逗号分割) from 表名;
    第二中方式:可以使用*,这种方式效率比较低。
        【重点】select * from 表名;
        这种方式的缺点:
            1.效率低,他首先会把*转换成字段名,转换的过程需要时间
            2.可读性差
        在实际开发过程中不建议使用,可以自己玩没问题。
        你可以在DOS命令窗口中项想快速看一下全表数据可以采用这种方式。
4、给查询的列起别名:
    【重点】select 字段名1 as 别名1[,字段名2 as 别名2,.....] from 表名;
        其中as关键字是可以省略的,“原字段名”和“别名”之间用逗号分割。
        select 字段名 别名[,字段名 别名] from 表名;
        加入起的别名里有空格:别名使用“单引号”或者“双引号”括起来就可以。
        注意:在所有的数据库当中,字符串统一使用单引号括起来,
        单引号是标准,双引号在Oracle数据库中用不了,但是在MySQL数据库中可以使用。
    示例:
    mysql> select deptno as '部门编号',dname as '部门名称' from dept;
    +--------------+--------------+
    | 部门编号     | 部门名称     |
    +--------------+--------------+
    |           10 | ACCOUNTING   |
    |           20 | RESEARCH     |
    |           30 | SALES        |
    |           40 | OPERATIONS   |
    +--------------+--------------+
    as只是将显示的字段名更改,原表列名不变。
    select属于DQL是永远都不会进行修改操作的。
5、计算员工年薪: sal * 12
    mysql> select ename as '员工姓名',sal * 12 as '年薪' from emp;
    通过本例可以得出:字段名可以使用数表达式。
    【数学表达式必须是可以参与运算的字段】

条件查询
1、什么是条件查询?
    不是将表中所有数据都查出来,是查出来符合条件的。
   语法格式:
   【重点】
    select
        字段1[,字段2,...]
    from 
        表名
    where 
        条件;
条件包括        
1、等于:“=”
    示例:查询薪资等于800的员工姓名和编号。
        mysql> select empno,ename from emp where sal = 800;
        +-------+-------+
        | empno | ename |
        +-------+-------+
        |  7369 | SMITH |
        +-------+-------+
    示例:查询员工姓名是'SMITH'的员工的编号、姓名、薪资。
        【等号还可以用于字符串】
        mysql> select empno,ename,sal from emp where ename = 'SMITH';
        +-------+-------+--------+
        | empno | ename | sal    |
        +-------+-------+--------+
        |  7369 | SMITH | 800.00 |
        +-------+-------+--------+
2、不等于:“<>”或“!=”
    示例:查询薪资不等于800的员工姓名和编号。
        mysql> select empno,ename from emp where sal != 800;
3、小于小于等于:“<”或“<=”
    示例:查询薪资小于等于3000的员工姓名和编号、薪资。
        mysql> select empno,ename,sal from emp where sal <= 3000;
    示例:查询薪资小于3000的员工姓名和编号、薪资。
        mysql> select empno,ename,sal from emp where sal < 3000;
4、大于大于等于:“>”或“>=”
    示例:查询薪资大于等于3000的员工姓名和编号、薪资。
        mysql> select empno,ename,sal from emp where sal>=3000;
    示例:查询薪资大于3000的员工姓名和编号、薪资。
        mysql> select empno,ename,sal from emp where sal>3000;
5、between ... and ... :两个值之间,等同于 >= and <= 
    示例:查询薪资在2450到3000之间的员工的信息(包括2450和3000)。
        第一种方式:使用“>=” 和 “<=”;
                    mysql> select * from emp where sal >= 2450 and sal <= 3000;
                    mysql> select * from emp where sal >= 2450 && sal <= 3000;
                    【and和&&功能相同,在MySQL中标准的是and(and是并且的意思)】
        第二种方式:使用between and;between and是闭区间,包括左右两端的值。
                mysql> select empno,ename,sal,job,mgr,hiredate from emp where sal between 2450 and 3000;
                使用between and 必须遵循左小又大。
6、is null为“空”,(is not null 不为空)。
    示例:查询那些员工的津贴/补助为null:
            mysql> select ename from emp where comm is null;
          查询那些员工的津贴/补助不为null。
            mysql> select ename from emp where comm is not null;
    在数据库中null不能使用等号“=”来衡量,需要使用is null,因为数据库中的null,代表什么也没有,他不是一个值所以不能使用等号来衡量。
        mysql> select ename from emp where comm = null;【这种写法是错误的】
        mysql> select ename from emp where comm is != null;【这种写法是错误的】
7、and:并且。
    示例:查询工作岗位是MANAGER并且工资大于2500的员工信息。
        select * from emp where job='manager' and sal>=2500;
8、or: 或者。
    示例:查询工作岗位是manager或者salesman的员工。
        select * from emp where job='manager' or job='salesman';
        mysql> select * from emp where job='manager' || job='salesman';
        【or和||的作用是一样的】
9、and和or同时出现的话有优先级问题吗?
    and的优先级高于or,如果需要让or先执行,需要加小括号。
10、in:包含,相当于多个 or (not in 不在这个范围中)【in和not in在使用的时候一定要排除后面小括号中的null】
    语法结构: ... where 字段名 in (值1[,值2...])。  表示在这几个值当中的
    语法结构: ... where 字段名 not in (值1[,值2...])。  表示不在这几个值当中的
    示例:查询工作岗位是manager或者salesman的员工。
        mysql> select * from emp where job='manager' or job='salesman';
        mysql> select * from emp where job in ('manager','salesman');
    注意:in不是一个区间,in的小括号里面跟的是一个具体的值。
11、like : 模糊查询,支持“%”和“下划线(_)”匹配[%和_都是一个特殊的字符]
    %:匹配任意多个字符。
    下划线:任意一个字符.
    语法结构:... where 字段名 like 值; 
    示例:找出名字里面含有字母“o”的员工的信息。
        mysql> select * from emp where ename like '%o%';
    找出名字里以字母“T”结尾的员工的信息。
        mysql> select * from emp where ename like '%T';
    找出名字中第二个字母是A的员工的姓名的编号。
        mysql>  select * from emp where ename like '_a%'
    找出名字中含有下划线的员工的信息?
        mysql>  select * from emp where ename like '%_%';【这样做是错误的因为“下划线(_)”有特殊含义,这样会导致,找出所有人的姓名】
        mysql>  select * from emp where ename like '%\_%';【这样才可以,需要加一个转义字符“\”将具有特殊含义的(下划线),转译成一个普通的下划线】
    like可以进行模糊匹配,模糊匹配的时候不区分大小写,
    like同时也可以进行精确匹配,精确匹配的时候区分大小写,
    目前测试like只支持字符串的匹配,不支持基本数据类型的匹配。

排序:order by
1、排序使用关键字:order by
    语法结构:
    【重点】
    select 
        字段名1[,字段名2,...] 
    from 
        表名 
    order by 
        排序的字段1[,排序的字段2,...] [asc / desc],
        排序的字段1[,排序的字段2,...] [asc / desc]
        ...;
    //asc代表升序,desc代表降序【默认是asc可以省略不写,但是desc不能省略】
    //按照“排序的字段1”优先排序,其次按照“排序的字段2”进行排序。
    //可以同时指定有的字段升序排序有的字段降序排序
    示例:查询所有员工的信息,按照工资升序排序:
        select * from emp order by sal;【或者 ... order by sal asc】
    示例:查询所有员工的信息,按照工资降序排序:
        select * from emp order by sal desc;
    示例:查询所有员工的信息,
    按照“工资(sal)”降序排序,
    如果“工资(sal)”一样,那么按照“部门编号(deptno)”升序排序,
    如果“部门编号(deptno)”一样,那么按照“姓名(ename)”升序排序:【按照多个字段排序】
        select * from emp order by sal desc,deptno,ename asc; 
        【或者:select * from emp order by sal desc,deptno,ename; [asc可以省略]】
2、按照查询结果的第n列进行排序:
    select 列名1[,列名2,...] from 表名 order by 列序号[,列序号,...] [asc / desc];【不写默认是asc】
    示例:查询员工的姓名和工资,
    将查询结果集首先按照“工资(sal)”第二列(2)进行排序,
    如果“工资(sal)”一样,则按照“姓名(ename)”第一列(1)进行排序。
        select ename,sal from emp order by 2,1 desc;【在MySQL中字段序号从1开始】
    在开发中不建议这样写,因为不健壮。因为列的顺序很容易发生改变。

综合案例:
1、查询工资在1250到3000之间的员工信息,要求按照薪资降序排列。
    select * from emp where sal between 1250 and 3000 order by sal desc;
    或者:select * from emp where sal >= 1250 and sal <= 3000 order by sal desc;
2、【重点】:当条件子句(where) 和 排序子句(order by)同时存在的时候,
    where子句在前,order by 子句在后。
    order by是对查询结构集进行排序的,所以要先等查询完了在进行排序,所以order by子句在where子句之后。
3、顺序不能变
    select 
        ...
    from
        ...
    where
        ...
    order by
        ...
    以上语句的执行顺序:
        第一步:from
        第二步:where
        第三步:select
        第四步:order by(排序总是在最后执行)

    


        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

薛英豪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值