一.##数据库相关概念:
    1,DB:数据库,保存一组有组织的数据的容器。
    2,DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据。
    3,SQL:结构化查询语言,用于和DBMS通信的语言。

    二.##数据库存储数据的特点:
    1,将数据放到表中,表再放到库中。
    2,一个数据库中可以有多个表,每个表都有一个名字,用来标识自己,表名具有唯一性。
    3,表具有一些特性,这些特性定义了数据在表中如何存储,类似java中“类”的设计。
    4,表由列组成,我们也称为字段,所有表都是由一个或多个列组成的,每一列类似java中的“属性”。
    5,表中的数据是按行存储的,每一行类似于java中的“对象”

    三.##MySQL的服务的启动和停止:
    方式一:计算机—-右键管理—-服务。
    方式二:通过管理员身份运行黑窗口。
    net start 服务名(启动服务)
    net stop 服务名(停止服务)

    四.##MySQL服务的登录和退出:
    方式一:通过mysql自带的客户端
    只限于root用户
    方式二:通过windows自带的客户端
    登录语句式:
    mysql -h 主机名 -P 端口号 -u用户名 -p密码
    退出:
    exit或ctri+C

    五.##MySQL的常见命令:
    1,查看当前所有的数据库
    show databases;
    2,打开指定的库
    use 库名
    3,查看当前库的所有表
    show tables;
    4,查看其他库的所有表
    show tables from 库名;
    5,创建表
    create table 表名(
    列名 列类型,
    列名 列类型,
    …….

    6,查看表结构
    desc 表名;
    7,查看服务器的版本
    方式一:登录到mysql服务端
    select version();
    方式二:没有登录到mysql服务端
    mysql —version

    mysql —v
    8,显示表的结构
    desc 表名

    六.##mysql的语法规范
    1,不区分大小写,但建议关键字大写,表名,列名小写
    2,每条命令最好用分号结尾
    3,每条命令根据需要,可以进行缩进 或 换行
    4,注释(是让人看的)
    单行注释:#注释文字
    单行注释:— 注释文字
    多行注释:/ 注释文字 /

    七.##MySQL图像化用户界面(软件使用,命令)
    1,保存
    ctrl+s(快捷键)
    2,执行
    F9(快捷键)
    3,格式化
    F12 (快捷键)

    八.##DQL语言 (查询语句)
    1,基础查询 (表明字段加着重号`)
    语法:select 查询列表 from 表名;
    特点:1.查询列表可以是:表中的字段,常量值,表达式,函数
    2.查询的结果是一个虚拟的表格
    ##开始时开头添加:use employees #(打开库)
    例句:1.查询表中的单个字段
    select lastname from employees;
    2.查询表中的多个字段 (查询的字段用英文逗号隔开)
    select last_name,salary,email from employees;
    3.查询表中的所有字段 (也可双击图形界面左侧的字段名进项添加字段,代表所有字段)
    select
    from employees;
    4.查询常量值
    select 100; select ‘john’;
    5.查询表达式
    select 10098; select 100%98; #(% 取余数)
    6.查询函数
    select version();
    7.起别名(1.便于理解。2.如果要查询的字段有重名的情况,使用别名可以区分开来)
    select 100%98 as 结果; #(使用as)
    select last_name as 姓,first_name as 名 from employees; #(使用空格)
    (案例):查询salary,结果显示为 out put (别名有特殊字段,字符时加英文单引号或双引号)
    select salary as “out put” from employees;
    8.去重 (在字段名前添加关键字 distinct )
    语法:select distinct 字段名 from 表名;
    (案例):查询员工表中涉及到的所有的部门编号
    select distinct department_id from employees;
    9. + (加号的作用)##mysql中的加号仅仅只有一个功能:运算符
    select 100+90; #(两个操作数都为数值型,则做加法运算)
    select ‘123’+90; #(其中一方为字符型,试图将字符型数值转换成数值型,如果转换成功,则继续做加法运算)
    select ‘john’+90; #(如果转换失败,则将字符型数值转换为0)
    select null+10; #(只要其中一方为null,则结果肯定为null)
    10.拼接函数 concat
    语法 celect concat(‘a’,’b’,’c’) as 结果;
    (案例):查询员工名和姓连接成一个字段,并显示为 姓名
    select concat(last_name,first_name) as 姓名 from employees;
    11.(为空)数值有部分不为null,结果为null,用判断是否为空函数ifnull
    语法:select ifnull(字段名,返回值) as 别名,字段名 from 表名;
    select ifnull(commission_pct,0) as 奖金率,commission_pct from employees;
    (案例):显示出表employees的全部列,各个列之间用逗号连接,列头显示成out_put
    select concat(‘first_name’,’,’,’job_id’,’,’,ifnull(commission_pct,0)) as out_put from employees;
    2,条件查询 (where 筛选条件)
    语法:select 查询列表 from 表名 where 筛选条件;
    分类:1,按条件表达式筛选( <> 不等于符号 )
    条件运算符:> , < , = , != ,<> , >= , <=
    2,按逻辑表达式筛选
    逻辑运算符:&&(与), ||(或), !(非)
    标准逻辑运算符:and , or , not
    (&&和and:两个条件都为true,结果为true,反之为false)
    (||或or:只要有一个条件为true,结果为true,反之为false)
    (!或not:如果连接的条件本身为false,结果为true,反之为false)
    3,模糊查询:like , between and ,in ,is null
    例句:1,按条件表达式筛选 (运算符:> , < , = , != , <> , >= , <=)
    (案例):查询工资>12000的员工信息
    select
    from employees where salary>12000;
    (案例):查询部门编号不等于90号的员工名和部门编号
    select last_name,department_id from employees where department_id<>90;
    2,按逻辑表达式筛选 (运算符:and , or , not)
    (案例):查询工资在10000到20000之间的员工名,工资以及奖金
    select last_name,salary,commission_pct from employees where salary>=10000 and salary=<20000;
    (案例):查询部门编号不是在90到110之间,或者工资高于15000的员工信息 (not 使用:not(条件))
    select from employees where department_id<90 or department_id>110 or salary>15000;
    select
    from employees where not(department_id>=90 and department_id<=110) or salary>15000;
    3,模糊查询 (运算符:like , between and , in , is null)
    !! like !! (像)
    特点:1.一般和通配符搭配使用
    通配符:
    % 任意多个字符,包含0个字符
    任意单个字符
    (案例):查询员工名中包含字符a的员工信息 (%代表通配符,代表的是任意个字符)
    select from employees where lastname like ‘%a%’;
    (案例):查询员工名中第三个字符为e,第五个字符为a的员工名和工资
    select last_name,salary from employees where last_name like ‘__e_a%’;
    (案例):查询员工名中第二个字符为
    的员工名(\转义 字符或 escape ‘任意字符’)
    select lastname from employees where last_name like’_%’;
    select lastname from employees where last_name like’&_%’ escape ‘&’;
    !! between and !! (在什么什么之间)
    特点:1.使用between and 可以提高语句简洁度
    2.包含临界值
    3.两个临界值不要调换
    (案例):查询员工编号在100到120之间的员工信息
    select
    from employees where employeesid between 100 and 120;
    !! in !!
    含义:判断某字段的值是否属于in列表中的某一项
    特点:1.使用 in 提高语句简洁度
    2.in 列表的值类型必须要一致或兼容
    3.in列表的值不能是通配符
    (案例):查询员工的工种编号是 IT_PROG,AD_VP,AD_PRES中的一个员工名和工种编号
    select last_name,job_id from employees where job_id in(‘IT_PROG’,’AD_VP’,’AD_PRES’);
    !! is null !!
    特点:1.=或<>不能用于判断null值,is null或is not null 可以判断null值
    (案例):查询没有奖金的员工名和奖金率
    select last_name,commission_pct from employees where commission_pct is null;
    (案例):查询有奖金的员工名和奖金率 ( is 后面加 not )
    select last_name,commission_pct from employees where commission_pct is not null;
    3,排序查询 (order by , asc | desc )
    语法: select 查询列表 from 表 《可加where 筛选条件》 order by 排序列表 asc 或 desc
    特点:1.asc代表的是升序,desc代表的是降序,如果不写,默认是升序
    2.order by子句中可以支持单个字段,多个字段,表达式,函数,别名
    3.order by子句一般是放在查询语句的最后面
    例句:查询员工信息,要求工资从高到低排序
    select from employees order by salary desc;
    select
    from employees order by salary; (不加函数,默认排序正序)
    (案例):查询部门编号>=90的员工信息,按入职时间的先后进行排序(添加筛选条件)
    select from employees where department_id>=90 order by hiredate asc;
    (案例):按年薪的高低显示员工的信息和年薪(按表达式排序)
    select
    ,salary12(1+ifnull(commission_pct,0)) as 年薪 from employees order by salary12(1+ifnull(commission_pct,0)) desc;
    (案例):按年薪的高低显示员工的信息和年薪(按别名排序)
    select ,salary12(1+ifnull(commission_pct,0)) as 年薪 from employees order by 年薪 desc;
    (案例 :按姓名的长度显示员工的姓名和工资(按函数排序,添加函数 length 判断长度)
    select length(last_name) as 字节长度,last_name,salary from employees order by length(last_name) desc;
    select length(last_name) as 字节长度,last_name,salary from employees order by 字节长度 desc;
    (案例):查询员工信息,要求先按工资升序,再按员工编号降序(按多个字段排序)
    select
    from employees order by salary asc,employees_id desc;
    4.常见函数
    功能:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名、
    好处:1.隐藏了实现细节 2.提高代码的重用性
    调用:select 函数名(实参列表) from 表;
    特点:1.叫什么(函数名)
    2.干什么(函数功能)
    分类:1,单行函数
    如:concat,length,ifnull等
    单行函数分类
    1.字符函数
    !! length :获取参数值的字节个数
    (例句)select length(‘字符’);
    !! concat :拼接字符串
    (例句)select concat(last_name,’
    ‘,firstname) 姓名 from employees;
    !! upper :大写,lower :小写
    (例句)select upper(‘john’);
    (案例):将姓变大写,名变小写,然后拼接。
    select concat(upper(last_name),lower(first_name)) as 姓名 from employees;
    !! substr :截取字符,substring :截取字符串 注:索引从1开始
    (例句):截取从指定索引处后面所有字符
    select substr(‘李莫愁爱上了陆展元’,7) out_put; 结果为陆展元
    (例句):截取从指定索引处指定字符长度的字符
    select substr(‘李莫愁爱上了陆展元’,1,3) out_put; 结果为李莫愁
    (案例):姓名中首字符大写,其他字符小写然后用
    拼接,显示出来
    select concat(upper(substr(lastname,1,1),’‘,lower(substr(first_name,2))) 姓名 from employees;
    !! instr :返回子串第一次出现的索引,如果找不到返回0
    (例句):select instr(‘杨不悔爱上了殷六侠’,’殷六侠’) as out_put;
    !! trim :去前后空格
    (例句)select trim(‘ 张翠山 ‘) as out_put;
    (案例):去掉字符串里前后的a
    select trim(‘a’ from ‘aaaaaaaaaaaa张aaaaaaaa翠山aaaaaaaa’) as out_put;
    !! lpad :用指定的字符实现左填充指定长度
    (例句)select lpad(‘殷素素’,10,’‘) as out_put;
    !! rpad :用指定的字符实现右填充指定长度
    (例句)select rpad(‘殷素素’,9,’
    ‘) as out_put;
    !! replace :替换
    (例句)select replace(‘张无忌爱上周芷若’,’周芷若’,’赵敏’) as out_put;
    (结果) :张无忌爱上赵敏。
    2.分组函数
    功能:做统计使用,又称为统计函数,聚合函数,组函数

    九.##DML语言 (操作语句,插入,修改,删除)

    十.##DDL语言 (数据定义语言,库和表的管理,常见约束,常见数据类型)

    十一.##TCL语言 (事务控制语句)