本系列文章将重点整理MySQL的基本操作,所有的操作都基于以下的数据库进行:myemployees与girls数据库。数据库 myemployees 包括员工表employees、部门表departments、地理位置表locations、工种表jobs以及工资等级表job_grades。数据库 girls 包括管理员表admin、女神表beauty与男神表boys。



文章目录

  • 数据库相关概念
  • MySQL介绍
  • 常用命令
  • MySQL的语法规范
  • 查询
  • 基础查询
  • 加号“+”的作用
  • 条件查询
  • 基础查询总结
  • 条件查询总结


数据库相关概念

一、数据库的好处

  1. 可以持久化数据到本地
  2. 结构化查询

二、数据库的常见概念 ★

  1. DB:数据库,存储数据的容器
  2. DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB
  3. SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用的语言

三、数据库存储数据的特点

  1. 数据存放到表中,然后表再放到库中
  2. 一个库中可以有多张表,每张表具有唯一的表名用来标识自己
  3. 表中有一个或多个列,列又称为“字段”,相当于java中“属性”
  4. 表中的每一行数据,相当于java中“对象”

四、常见的数据库管理系统

  • mysql、oracle、db2、sqlserver

MySQL介绍

一、MySQL的背景

  • 前身属于瑞典的一家公司,MySQL AB
  • 08年被sun公司收购
  • 09年sun被oracle收购

二、MySQL的优点 ★

  1. 开源、免费、成本低
  2. 性能高、移植性也好
  3. 体积小,便于安装

三、MySQL的安装

  • MySQL属于c/s架构的软件,一般来讲安装服务端
  • 分为企业版、社区版,我们安装的都是社区版;共有5.5,5.6,5.7,8.0等版本。

常用命令

1.将MySQL添加到Windows服务,启/停MySQL服务:
net start mysql; (net stop mysql)
2. 登录mysql
mysql -h localhost -P 3306 -u root -p123456

该语句注意事项:

  • 这里的端口号参数-P必须用大写,小写的会报错
  • 用户名-u root这里的空格有没有都是可以的
  • 密码-p123456 这里要么就是不用空格,要么就是-p之后换行,改用隐藏密码的方式,不能在-p和密码之间加空格
  • 本地简单登录:mysql -uroot -p

mysql表的性别列表添加约束 mysql数据库性别怎么定义_数据库


3. 在一个数据库中查看另一个数据库中的所有表

show tables from 【数据库名】;

mysql表的性别列表添加约束 mysql数据库性别怎么定义_mysql表的性别列表添加约束_02


4. 查看当前的数据库

select databases();

mysql表的性别列表添加约束 mysql数据库性别怎么定义_数据库_03


5. 查看数据库的版本

select version();(登录到mysql服务端)
mysql --version;(没有登录到mysql服务端)
mysql -V;(没有登录到mysql服务端)

mysql表的性别列表添加约束 mysql数据库性别怎么定义_查询_04

mysql表的性别列表添加约束 mysql数据库性别怎么定义_mysql表的性别列表添加约束_05


6. 删除某条记录

delete from 【表名】 where 【+条件,如:where id = 1】;

MySQL的语法规范

  1. 不区分大小写,但建议关键字大写,表名、列名小写
  2. 每条命令最好用分号结尾(DOS命令行必须,可视化工具最好加分号)
  3. 每条命令根据需要,可以进行缩进或换行
  4. 注释:单行注释:#注释文字,或者–注释文字
    多行注释和java中相同:/* 注释文字*/

查询

基础查询

MySQL的可视化工具有很多,个人常用的有Navicat和MySQL Workbench,其实还有一个工具SQLyog,该工具对于以上规范的支持比较友好,自动将关键字大写,并且在查询某字段时,可以直接通过“哪里不会点哪里”的方式进行查询,避免了手动输入。如下图,字段的输入,可以直接通过双击字段的方式。

mysql表的性别列表添加约束 mysql数据库性别怎么定义_mysql表的性别列表添加约束_06


上图中,字段的着重号为自动添加,也可以去掉,没有影响。

    1. 查询常量(查询常量类似于打印)
     select 【+常量值】,如:
    select 100;
    select ‘Jack’;2. 查询表达式
    select 100*3;
    select 100%98;3. 查询函数
    select version();
    select database();4. 起别名(要查询的字段有重名的情况,可以用别名来区分)
     方式一:使用as
    select last_name as 姓, first_name as 名 from employees;
     方式二:使用空格
    select last_name 姓, first_name 名 from employees;
     方式三:可加双引号或单引号,推荐双引号
    select salary as “out put” from employees;5. 去重
    select distinct ‘department_id’ from employees;6. 连接符
    select concat (‘a’,‘b’,‘c’) as 结果;
    select concat (last_name, first_name) as 姓名 from employees;7. 是否为空
    select ifnull(commission_pct, 0) as 奖金率, commission_pct from employees; #若奖金率为空,则将查询的奖金率置为0加号“+”的作用
    java中的+号
     1)运算符:两个操作数都为数值型;
     2)连接符:只要一个操作数为字符串。mysql中的+号
     仅仅只有一个功能:运算符
     select 100+99; #两个操作数都为数值型,则做加法运算
     select ‘123’+90; #其中一方为字符型,试图将字符型数值转换为数值型;如果转换成功,则继续做加法运算
     select ‘jack’+12; #如果转换失败,则将字符型数值转换成0
     select null+10; #只要其中一方为null,则结果肯定为null

    条件查询

    语法:
    select 查询列表 from 表名 where 筛选条件;
    分类:
    一、按条件表达式筛选
    简单条件运算符:>, < , =, !=, <>, >=, <=
    二、按逻辑表达式筛选
    逻辑运算符: && || !
    and or not (推荐)
    三、模糊查询
    复杂一点的条件运算符:like, between and, in, is null, is not null

    like的通配符:
     %,匹配0个或多个字符;
     _,匹配单个字符;
     \,转义符,或者使用escape关键字
     between and:判断某字段的值是否落在某个范围内,包含边界值;两个值不能颠倒
     in:判断某字段的值是否属于in列表中的某一项,使用in提高了语句简洁度;in列表的值类型必须是一致或兼容,如‘123’与123;in列表中的值不能使用通配符,因为查询条件相当于“=”,而不是“like”
     is null:用于判断某字段值是否为null,我们不能使用“= null”或者“<> null”来进行查询,后者查询不出结果。
     <=>:安全等于,既可以用来判断null值,也可以用来判断是否等于普通数值,缺点是:可读性比较差,推荐使用is null。

    案例1(逻辑运算符与between and):查询部门编号不是在90到110之间,或者工资高于15000的员工信息

    SELECT
    	*
    FROM 
    	employees
    WHERE
    	NOT (department_id >= 90 AND department_id <= 110)
    	OR salary > 15000;
    SELECT
    	*
    FROM 
    	employees
    WHERE
    	NOT (department_id BETWEEN 90 AND 110)
    	OR salary > 15000;

    案例2(通配符%与_):查询员工中第三个字符为n,第五个字符为l的员工名和工资(别忘了最后用%通配符)

    #案例2
    SELECT
    	last_name,
    	salary
    FROM
    	employees
    WHERE
    	last_name LIKE '__n_l%';

    案例3(转义符\与escape):查询员工名中第二个字符为_的员工名

    SELECT
    	last_name
    FROM
    	employees
    WHERE
    	last_name LIKE '_\_%';#\转义
    SELECT
    	last_name
    FROM
    	employees
    WHERE
    	last_name LIKE '_$_%' ESCAPE '$';#将$作为转义符(推荐)

    案例4(in条件运算符):查询员工的工种编号是IT_PROT, AD_VP, AD_PRES中的一种的员工名和工种编号

    SELECT 
    	last_name,
    	job_id
    FROM 
    	employees
    WHERE
    	job_id = 'IT_PROT' OR job_id = 'AD_VP' OR job_id = 'AD_PRES';
    SELECT 
    	last_name,
    	job_id
    FROM 
    	employees
    WHERE
    	job_id IN ('IT_PROT','AD_VP','AD_PRES');

    案例5(is null):查询没有奖金的员工名和奖金率

    SELECT
    	last_name,
    	commission_pct
    FROM
    	employees
    WHERE
    	commission_pct IS NULL;

    案例6(ifnull):查询员工号为176的员工的姓名和部门和年薪

    SELECT
    	last_name,
    	department_id,
    	salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
    FROM
    	employees;

    经典面试题
    试问一下语句的结果是否一样,并说明原因?

    SELECT * FROM employees;
    SELECT * FROM employees WHERE commission_pct LIKE '%%' AND last_name LIKE '%%';

    答:不一样,因为第二条语句判断的字段有null值,两者求得的交集;
    若改为,以下语句则结果一样,因为求的是并集,有不是null的字段。

    SELECT * FROM employees WHERE commission_pct LIKE '%%' OR last_name LIKE '%%' OR employee_id LIKE '%%';

    基础查询总结

    一、语法
    select 查询列表 from 表名;

    二、特点

    1. 查询列表可以是字段、常量、表达式、函数,也可以是多个
    2. 查询结果是一个虚拟表

    三、示例

    1. 查询单个字段
      select 字段名 from 表名;
    2. 查询多个字段
      select 字段名, 字段名 from 表名;
    3. 查询所有字段
      select * from 表名
    4. 查询常量
      select 常量值;
      注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要
    5. 查询函数
      select 函数名(实参列表);
    6. 查询表达式
      select 100/1234;
    7. 起别名
      ①as 查询多个时可读性好
      ②空格 查询单个时简洁
    8. 去重
      select distinct 字段名 from 表名;
    9. 加号 +
      作用:做加法运算
      select 数值+数值; 直接运算
      select 字符+数值;先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
      select null+值;结果都为null
    10. 【补充】concat函数
      功能:拼接字符
      select concat(字符1,字符2,字符3,…);
    11. 【补充】ifnull函数
      功能:判断某字段或表达式是否为null,如果为null 返回指定的值,否则返回原本的值
      select ifnull(commission_pct,0) from employees;
    12. 【补充】isnull函数
      功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0

    条件查询总结

    一、语法
    select 查询列表 from 表名 where 筛选条件

    二、筛选条件的分类

    1. 简单条件运算符
      > < = <> != >= <= <=>安全等于
    2. 逻辑运算符
      && and
      || or
      ! not
    3. 模糊查询
      like:一般搭配通配符使用,可以判断字符型或数值型
      通配符:%任意多个字符,_任意单个字符
      between and
      in
      is null /is not null:用于判断null值
    4. 两者的比较 is null PK <=>安全等于

    普通类型的数值

    null值

    可读性

    is null

    ×



    <=>



    ×