MySQL数据库——基础查询和条件查询

数据库的好处:

  1.持久化数据到本地

  2.可以实现结构化查询,方便管理

数据库相关概念:

  DB:数据库(database)——存储数据的“仓库”。它保存了一系列有组织的数据。

  DBMS:数据库管理系统(Database Management System)。数据库是通过DBMS创建和操作的容器。(数据库软件、数据库产品)

Oracle昂贵,服务收费(后期的维护和升级都是收费的)。

DB2:IBM公司。适合处理海量数据。

SqlServer:微软公司。只能安装在Windows操作系统。

  SQL:结构化查询语言(Structure Query Language)。专门用来与数据库通信的语言。

SQL的优点:

  1.不是某个特定的数据库应用商专有的语言,几乎所有DBMS都支持SQL

  2.简单易学

  3.虽然简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。

三者的关系:

数据库的特点:

  1.将数据放到表中,表再放到库中。

  2.一个数据库可以有多个表,每个表都有一个自己的名字标识自己。表名具有唯一性。

  3.表具有一些特性,这些特性定义了数据来表中如何存储,类似java中“类”的设计。

  4.表由列组成,我们也成为字段。所有表都是由一个或多个列组成的,每一列类似于java中的“属性”。

  5.表中的数据是按行存储的,每一行相当于java中的“对象”

MySQL:关系数据库软件。

MySQL数据库一开始隶属于MySQL AB公司,总部位于瑞典,后被oracle收购。

优点:

  1.成本低:开源免费

  2.性能高:执行很快

  3.简单:很容易安装和使用

DBMS分为两类:

  1.基于共享文件系统的DBMS(表格,比如微软的excel)

  3.基于客户机——服务器的DBMS(一般所说的安装数据库都是说安装服务端)

MySQL服务的启动和停止:

  net stop mysql

  net start mysql

启动之后才能刷卡登录。

登录方式:

  1.通过mysql自带的客户端:不够灵活,仅限于root用户

  2.通过Windows资道的客户端:mysql -h 主机名 -P 端口号 -u 用户名 -p密码

退出:

  exit或者ctrl+C

MySQL常用语句:

  

 

语法规范:

  1.不区分大小写,但是建议关键字大写,表名列名大写

  2.每条命令用分号结尾

  3.每条命令根据需要进行缩进或者换行

  4.注释

    单行注释:#注释文字

    大巷注释:-- 注释文字(注意--后有个空格)

    多行注释:/*注释文字*/

SQL语言的学习:

 

#进阶1:基础查询
/*
语法:
select 查询列表 from 表名;
类似于:System.out.println(打印东西)

特点:
1、查询列表可以是:表中的字段、常量、表达式、函数
2、查询的结果是一个虚拟的表格
*/

#先打开库
USE myemployees;

#1、查询表中的单个字段
SELECT 
  last_name 
FROM
  employees ;

#2、查询表中的多个字段
SELECT 
  last_name,
  salary,
  email 
FROM
  employees ;

#2、查询表中所有字段
SELECT 
  `employee_id`,#着重号用于区分字段和关键字
  `first_name`,
  `last_name`,
  `email`,
  `phone_number`,
  `job_id` 
FROM
  employees ;

#方式二:
SELECT 
  * 
FROM
  employees ;

#4、查询常量值
SELECT 100;
SELECT 'join';

#5、查询表达式
SELECT 100*98;
SELECT 100&98;

#6、查询函数
SELECT VERSION();

#7、给字段起别名
#便于理解
#如果要查询的字段有别名的情况,使用别名可以区分开来
#方式一:
SELECT 
  100 % 98 AS 结果 ;

SELECT 
  lase_name AS 姓,
  first_name ASFROM
  employees ;
#方式二:
SELECT lase_name 姓, first_name 名 FROM employees;

#8、去重
#查询员工表中设计的所有部分标号
selectd DISTINCT department_id FROM employees;

#9+号的作用
#案例:查询员工名和姓连接成一个字段,显示为 姓名
#仅仅只有一个功能:运算符
#select 100+90;两个操作数都为数值型
#select '123'+90;有其中一方为字符型,试图将字符型数值转换为数值型,如果转换成功则继续加法运算
#select 'abc'+90;如果转换失败,字符型会被转换成0
#select null+90;只要一方结果为null,结果肯定为null

SELECT CONCAT('a','b','c') AS 结果;

SELECT 
  CONCAT(last_name,first_name) AS 姓名 
FROM
  employees ;
#1. 下面的语句是否可以执行成功    可以!
SELECT last_name , job_id , salary AS sal
FROM employees;
#2. 下面的语句是否可以执行成功    可以!
SELECT * FROM employees;    
#3. 找出下面语句中的错误
SELECT employee_id , last_name,
salary * 12 “ANNUAL SALARY”
FROM employees;
#逗号、英文双引号

#4. 显示表departments的结构,并查询其中的全部数据
DESC departments;
SELECT * FROM departments;

#5. 显示出表employees中的全部job_id(不能重复)
SELECT DISTINCT job_id FROM employees;

#6. 显示出表employees的全部列,各个列之间用逗号连接,列头显示成OUT_PUT
SELECT 
  CONCAT(
    `first_name`,
    `,`,
    `last_name`,
    `,`,
    `email`,
    `,`,
    `phone_number`,
    `,`,
    `job_id`,
    `,`,
    `salary`,
    `,`,
    `commission_pct`,
    `,`,
    `manager_id`,
    `,`,
    `department_id`,
    `,`,
    `hiredate`
  ) AS out_put 
FROM
  employees ;
进阶 2 :条件查询 
/*
语法:
    select 
        查询列表
    from
        表名(①)
    where
        筛选条件;(②)
当条件成立,显示出来,相当与if(条件)

分类:
    1、按条件表达式筛选
    条件运算符:> < = <>(不等) >= <=
    2、按逻辑表达式筛选
    逻辑运算符: && || !
             and or not(推荐使用)
    3、模糊查询
        like
        between and
        in
        is null

*/
#按照条件表达式查询
#案例 1 :查询员工工资》 12000SELECT
  * 
FROM
  employees 
WHERE salary > 12000 ;

#案例2:查询部分编号不等于90号的员工姓名和部分编号
SELECT 
  last_name,
  department_id 
FROM
  employees 
WHERE department_id <> 90 ;

#二、按逻辑表达式筛选
#作用:用于连接条件表达式的
#案例1:查询工资在10000到20000之间的员工名和工资以及奖金
SELECT 
  last_name,
  salary,
  commission_pct 
FROM
  employees 
WHERE salary >= 10000 
  AND salary <= 12000 ;
#案例2:查询部门彪悍不是90-100之间或者工资高于15000的员工信息
SELECT 
  * 
FROM
  employees 
WHERE department_id < 90 
  OR department_id > 100 
  OR salary > 15000 ;

#三、模糊查询
/*
like
①特点:一般和通配符搭配使用
    通配符:
        % 任意多个字符,包含0个
        _ 任意单个字符,就一个
between
in
is null
is not null
*/
#1like
#案例1:查询员工名中包含字符a的员工信息
SELECT 
  * 
FROM
  employees 
WHERE last_name LIKE '%a%' ;
#案例2:查询员工名中第三个字符为n的,第五个字符为l的员工名和工资
SELECT 
  last_name,
  salary 
FROM
  employees 
WHERE last_name LIKE '__n_l%';
#案例3:查询员工名中第二个字符为_的员工
SELECT 
  last_name 
FROM
  employees 
WHERE last_name LIKE '_\_%';

#2between and
/*
使用可以提高简洁度,前后闭区间,包含临界值,两个临界值不可以颠倒顺序。
*/
#案例1:查询员工编号100-120之间的
SELECT 
  * 
FROM
  employees 
WHERE employee_id >= 100 
  AND employee_id <= 120 ;

SELECT 
  * 
FROM
  employees 
WHERE employee_id BETWEEN 100 
  AND 120 ;

#3in
#用于判断某字段的值是否属于in列表中的一项
#使用in提高语句简洁度
#in列表的值类型必须统一或兼容
#in列表中不能使用%这些符号,因为in是=操作
#案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
SELECT 
  last_name,
  job_id 
FROM
  employees 
WHERE job_id IN ('IT_PROG', 'AD_VP', 'AD_PRES') ;

#4is null
# = <>不能用于判断null值
#is只能和null搭配
#案例:查询没有奖金的员工名
SELECT 
  last_name 
FROM
  employees 
WHERE commission_pct IS NULL ;

#安全等于<=>
#可以判断null值
#案例1:查询没有奖金的员工名
SELECT 
  last_name 
FROM
  employees 
WHERE commission_pct <=> NULL ;
#判断是否等于
#is null pk <=>
#is null :仅仅可以判断 null 值,可读性较高,建议使用 <=> :既可以判断 null 值,又可以判断普通的数值,可读性较低 

#2、查询员工号为176的员工姓名和部门号和年薪
SELECT 
  last_name,
  department_id,
  salary * 12 * (1+ IFNULL(commission_pct, 0) AS 年薪
FROM
  employees ;
进阶 2 :条件查询 
/*
语法:
    select 
        查询列表
    from
        表名(①)
    where
        筛选条件;(②)
当条件成立,显示出来,相当与if(条件)

分类:
    1、按条件表达式筛选
    条件运算符:> < = <>(不等) >= <=
    2、按逻辑表达式筛选
    逻辑运算符: && || !
             and or not(推荐使用)
    3、模糊查询
        like
        between and
        in
        is null

*/
#按照条件表达式查询
#案例 1 :查询员工工资>12000SELECT
  * 
FROM
  employees 
WHERE salary > 12000 ;

#案例2:查询部分编号不等于90号的员工姓名和部分编号
SELECT 
  last_name,
  department_id 
FROM
  employees 
WHERE department_id <> 90 ;

#二、按逻辑表达式筛选
#作用:用于连接条件表达式的
#案例1:查询工资在10000到20000之间的员工名和工资以及奖金
SELECT 
  last_name,
  salary,
  commission_pct 
FROM
  employees 
WHERE salary >= 10000 
  AND salary <= 12000 ;
#案例2:查询部门彪悍不是90-100之间或者工资高于15000的员工信息
SELECT 
  * 
FROM
  employees 
WHERE department_id < 90 
  OR department_id > 100 
  OR salary > 15000 ;

#三、模糊查询
/*
like
①特点:一般和通配符搭配使用
    通配符:
        % 任意多个字符,包含0个
        _ 任意单个字符,就一个
between
in
is null
is not null
*/
#1like
#案例1:查询员工名中包含字符a的员工信息
SELECT 
  * 
FROM
  employees 
WHERE last_name LIKE '%a%' ;
#案例2:查询员工名中第三个字符为n的,第五个字符为l的员工名和工资
SELECT 
  last_name,
  salary 
FROM
  employees 
WHERE last_name LIKE '__n_l%';
#案例3:查询员工名中第二个字符为_的员工
SELECT 
  last_name 
FROM
  employees 
WHERE last_name LIKE '_\_%';

#2between and
/*
使用可以提高简洁度,前后闭区间,包含临界值,两个临界值不可以颠倒顺序。
*/
#案例1:查询员工编号100-120之间的
SELECT 
  * 
FROM
  employees 
WHERE employee_id >= 100 
  AND employee_id <= 120 ;

SELECT 
  * 
FROM
  employees 
WHERE employee_id BETWEEN 100 
  AND 120 ;

#3in
#用于判断某字段的值是否属于in列表中的一项
#使用in提高语句简洁度
#in列表的值类型必须统一或兼容
#in列表中不能使用%这些符号,因为in是=操作
#案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
SELECT 
  last_name,
  job_id 
FROM
  employees 
WHERE job_id IN ('IT_PROG', 'AD_VP', 'AD_PRES') ;

#4is null
# = <>不能用于判断null值
#is只能和null搭配
#案例:查询没有奖金的员工名
SELECT 
  last_name 
FROM
  employees 
WHERE commission_pct IS NULL ;

#安全等于<=>
#可以判断null值
#案例1:查询没有奖金的员工名
SELECT 
  last_name 
FROM
  employees 
WHERE commission_pct <=> NULL ;
#判断是否等于
#is null pk <=>
#is null :仅仅可以判断 null 值,可读性较高,建议使用 <=> :既可以判断 null 值,又可以判断普通的数值,可读性较低 

#2、查询员工号为176的员工姓名和部门号和年薪
SELECT 
  last_name,
  department_id,
  salary * 12 * (1+ IFNULL(commission_pct, 0)) AS 年薪
FROM
  employees ;
  
 
#测试题
#1. 查询没有奖金,且工资小于 18000 的 salary 、 last_name 
SELECT 
  salary,
  last_name 
FROM
  employees 
WHERE commission_pct IS NULL 
  AND salary < 18000 ;
#2、查询employees中,job_id不为"IT"或者工资为12000的员工信息
SELECT 
  * 
FROM
  employees 
WHERE job_id <> 'IT' 
  OR salary = 12000 ;

#3.查询表的结构
DESC departments;

#4、查询部门departments表中涉及到了哪些位置编号
#distinct是去重命令
SELECT DISTINCT 
  location_id 
FROM
  departments ;

#5、经典面试题
/*
试问:select * from employees 和
select * from employees where commission_pct like '%%' and last_name like '%%';
结果是否一样?并说明原因
*/
不一样!如果判断的字段有NULL值,不一样;如果没有NULL就一样了。

/*
试问:select * from employees 和
select * from employees where commission_pct like '%%' or last_name like '%%';
结果是否一样?并说明原因
*/
使用OR那就一样了,总归有一个字段不为NULL

总结:

与MySQL的第一次亲密接触

  一、数据库的好处

    1、可以持久化数据到本地(借助数据库管理工具,将数据最终存储到本地)

    2、结构化查询(方便管理)

  二、数据库的相关概念

    1、DB:数据库。存储数据的容器

    2、DBMS:数据库管理系统,又称为数据库软件或产品。专门用来创建或管理BD

    3、SQL:结构化查询语言。用于和数据库通信的语言,不是某个数据库软件特有的,几乎所有的主流的数据库软件通用的语言

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

    1、数据存放到表中,然后表再放到库中

    2、一个库中可以有多张表,每张表具有唯一的表名用来标识自己

    3、表中有一个或者多个列,列又称为“字段”,相当于java中的“属性”

    4、表中每一行数据相当于java中说的“对象”

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

    1、MySQL:关系数据库管理软件。

    2、Oracle:

    3、DB2:

    4、SqlServer:

MySQL介绍

  一、MySQL背景

    前身属于瑞典的一家公司,MySQL AB

    08年被sun公司收购

    09年sun被Oracle公司收购

  二、MySQL优点

    1、开源、免费、成本低

    2、性能高、移植性好

    3、体积小,便于安装

  三、MySQL的安装

    属于C/S架构软件,既有服务端也有客户端,一般来讲安装服务端。

    企业版

    社区版

  四、MySQL服务的启动和停止

    方式一:计算机——右击——管理——服务

    方式二:命令行net start 服务名

              net stop 服务名

  五:MySQL服务的登录和退出

    登录:mysql 【-h主机名 -P端口号】 -u用户名 -p密码

                       注意:-p和密码之间不能加空格!

    退出:exit或ctrl+C

DQL语言:查询语言

  一、语法

    select 查询列表  

    from 表名;

  二、特点

    1、查询列表可以是字段、常量、表达式、函数,也可以是多个

       2、查询结果是一个虚拟的表

  三、示例

    1、查询单个字段

      select 字段名 from 表名;

    2、查询多个字段

    3、查询所有字段

      select * from 表名;

    4、查询常量

      select 常量值;(不加from,加了也不会报错,但是没用)

      注意:字符型和日期型的常量必须用单引号,数值型不用

    5、查询函数

      select 函数名(实参列表);

    6、查询表达式

      select 100/124;

    7、起别名

      ①as

      ②空格

    8、去重

      select distinct 字段名 from 表名;

      select distinct a,b from表名;不能这么写!

    9、+

      作用:做加法运算

      select 数值+数值;直接运算

      select 字符+数值;先试图将字符转换成数值,如果成功则运算,否则转换成0进行运算

      select null+任何值;结构都为null

    10、concat函数

       功能: select concat(字符1,字符2,字符3...);拼到一起充当一个字符

    11、ifnull函数

      功能:判断某字段或表达式是否为null,如果为null,返回指定值,否则返回原本值

    12、isnull函数

      功能:判断某字段或者表达式是否为null,如果是,则返回1,否则返回0

条件查询

  一、语法

    select 查询列表

    from 表名

    where 筛选条件;

  二、筛选条件的分类

    1、简单条件运算符

      >  <  =  <>  !=  <=>(安全等于)  >=  <= 

    2、逻辑运算符

      &&  ||  !  and  or  not

    3、模糊查询(复杂条件运算符)

      like     between and     in     is null     is not null

      like:一般搭配通配符使用,用于判断字符型数值,现在的版本也可以判断数值型

         select * from employees where department_id like '1__';

      通配符:%任意多个字符

          _任意单个字符

      between and 可读性变高

      is null 专门用来判断null值

 

posted @ 2021-02-15 16:23  不妨不妨,来日方长  阅读(375)  评论(0编辑  收藏  举报