MySQL基础——数据库简述,SQL语句(1)

一、引言

MySQL是目前最流行的关系型数据库管理系统之一,被广泛应用于Web开发、数据分析等领域。为了更好地使用MySQL,我们需要先了解什么是数据库,以及如何使用SQL语句对数据库进行操作。本文将为您介绍MySQL数据库基础知识和部分常用的SQL语句,帮助您更好地使用MySQL。

二、数据库简述

(1)数据库的概念

数据库是用来组织、存储和管理数据的系统。对数据进行增删改查的操作。

  • 使用文件存放数据的劣势:
    1. 没有数据类型。所有文件数据都是字符串
    2. 缺少对大数据集的优化,大文件的操作效率很慢
    3. 增删改查的效率很慢
    4. 缺少并发。多个用户无法操作同一文件
    5. 缺少权限校验机制
    6. 缺少容灾机制。

(2)数据库的分类

关系型数据库NoSql(Not Only Sql)数据库
数据结构结构化的数据,以表为单位进行存储半结构化(xml、json)、非结构化(文档、图片、视频等)
事务强事务弱事务
性能高并发下性能较差高并发下性能较好
  • 实战开发中,两种数据库相辅相成

    1. 关系型:对事务要求比较高的数据,如金融类、个人信息等
      • SQLServer、MySQL(免费、开源、被Oracle收购)、Oracle等
    2. 非关系型:对事务要求比较低、对性能要求比较高的数据,如聊天记录、商品详情等
      • Redis、MonggoDB等

(3)数据库的工作模型

  • 客户端+服务器的工作模型
    • 一个软件可以同时为多个用户提供服务。

(4)导入测试数据

  1. 新建数据库

  1. 导入SQL文件

(5)数据库中的相关概念

  1. 库:数据库,内部存放着所有的表、视图、索引等内容
  2. 表:是数据库存储数据的基本单位,由行和列组成
  3. 列:又称为字段,是表的基本组成单位,相当于Java类中的属性
  4. 行:是表的基本组成单位,具体数据,每行信息是一个整体,由固定字段构成。相当于Java中由类实例化出来的一个又一个的对象
  5. 主键:是表中额外新增的字段,作用为方便检索数据

三、SQL语句(1)

(1)SQL简述

  • SQL:结构化查询语言,提供了对数据库数据的增删改查操作对应的处理

SQL是一种规范,也是一种国际标准,所有的关系型数据库都支持SQL,不被MySQL独有

特点

  1. 不区分大小写
  2. 注释:
    • 单行:-- (–空格)
    • 多行:/* */

(2)简单查询

1.查询所有字段

-- 查询所有列:select * from 表名(*:是通配符,表示所有列)  
select * from employees

2.查询部分字段

 select 列名1,列名2,... from 表名
  • 也可以通过列出所有字段名的方式查询所有字段
    • 优点:
      1. 效率更快
      2. 可读性较好
      3. 可维护性较高
    • 缺点:
      1. 书写繁琐
-- 查询所有字段
SELECT * from employees
-- 查询员工id、员工工资
select employee_id,salary from employees
-- 列出所有字段名查询所有字段
select employee_id,salary,first_name,last_name,email,phone_number,job_id,commission_pct,manager_id,department_id,hiredate from employees

3.结果运算

+、-、*、/、%

select 列名 运算符 值  from 表名
-- 查询员工id和工资,及对工资进行加减乘除的运算
    select employee_id,salary,salary+100,salary-100,salary*100,salary/100,salary%100  from employees

结果运算与非数值类型进行运算时,会先将非数值类型数据进行转换(根据第一个字符来换算,如果是数字就换成该数字,如果不是就换成0),再进行运算。

4.别名

  • 对查询之后的结果起别名(只针对此次查询,不会修改表)
    select 列名 as 别名,列名 as 别名,列名,...  from 表名
  • 别名可以省略单引号

    标准SQL中没有双引号,字符串通过单引号修饰

  • as关键字可省

    -- 查看员工id和员工工资
   select employee_id as 员工id,salary as 工资 from employees
    -- as关键字可省
   select employee_id 员工id,salary 工资 from employees

5.去重

select distinct 列名1,列名2,.. from 表名
  • 当去重规则为多个字段时,只有当多个字段的值都相同时才会去重
-- 查询所有的职位id(根据job_id进行去重)
select distinct job_id from employees
-- 查询所有的职位和部门id(根据job_id和department_id去重)
select distinct job_id,department_id from employees

6.分支-case when

case
   when 条件1 then 结果1
   when 条件2 then 结果2
   ...
   else 其他结果
end
-- 满足when中的条件,便执行对应then中的结果,如果when都不满足,则最终执行else,从上往下判断
-- 查询员工id、员工工资、工资等级(工资>=15000 高薪,工资>=10000 中薪,工资>=5000  一般,工资<5000  低薪)
select employee_id 员工id,salary 员工工资,
	case
		when salary>=15000 then '高薪'
		when salary>=10000 then '中薪'
		when salary>=5000 then '一般'
		else '低薪'
	end  as 薪资等级
from employees

7.查看表详情

  • 表详情:当前表的字段设计
describe 表名-- describe关键字可以简写为desc
-- 查看员工表详情
describe employees
desc employees

(3)条件查询

  • 能够支持的关系运算符:> < >= <= != =

1.单条件查询

select 列名... from 表名  where 筛选条件
  • MySQL中对比字符串时默认不区分大小写,若想区分,则在对应字段前添加binary关键字即可
-- 查询工资大于10000的员工信息
select * from employees where salary>10000
-- 查询部门id<50的员工信息
select * from employees where department_id<50
-- 查询起始名为Steven的员工信息-不区分大小写
select * from employees where first_name='steven'
-- 区分大小写
select * from employees where binary first_name='Steven'

2.多条件查询

where 条件1 连接符  条件2
连接符:
and:表示并且,意为同时满足,相当于Java中的&&
or:表示或者,意为满足任意一个即可,相当于Java中的||
-- 查询员工工资>10000并且部门id<50的员工信息
select * from employees where salary>10000 and department_id<50
-- 查询员工id<120或者部门id=80的员工信息
select * from employees where employee_id<120 or department_id=80

3.区间查询

where 列名 [not] between 起始值 and 结束值
  • 中括号中的内容意为可省
  • 加上not表示不在此区间之内
-- 查询工资大于10000并且小于12000的员工信息
select * from employees where salary>=10000 and salary<=12000
-- 区间查询(在范围内):between 起始值 and 结束值
select * from employees where salary between 10000 and 12000
-- 区间查询(不在范围内):not between 起始值 and 结束值
select * from employees where salary not between 10000 and 12000

4.枚举查询

where 列名 [not] in(1,2,...)
-- 查询部门id是10、20、30的员工信息
select * from employees where department_id=10 or department_id=20 or department_id=30
-- 枚举查询(列举字段所有满足条件的值):列名 in(值1,值2,...)
select * from employees where department_id in(10,20,30)
-- 不在范围内:列名  not in(值1,...)
select * from employees where department_id not in(10,20,30)

5.空值查询

where 列名 is [not] null
-- 查询没有绩效的员工信息
-- 为空:列名 is null
select * from employees where commission_pct is null
-- 不为空:列名 is not null
select * from employees where commission_pct is not null

6.模糊查询

where 列名 [not] like '通配模式'

可用占位符:
%:表示n个字符
_:表示1个字符
-- 查询起始名以p开头的员工信息
select * from employees where first_name like 'p%'
-- 查询起始名中包含p的员工信息
select * from employees where first_name like '%p%'
-- 查询起始名第二个字母是a的员工信息
select * from employees where first_name like '_a%'
-- 查询起始名由5个字母组成的员工信息
select * from employees where first_name like '_____'

(4)单行函数

  • 一行数据得到一个结果
  1. concat

    • 将多个内容合并为一个内容,相当于字符串拼接
       select concat(列名1,列名2,...) from 表名
    
       -- 以“起始名-结束名"的方式查询员工姓名
       select concat(first_name,'-',last_name) from employees
    
  2. length

    • 获取数据长度
       select length(列名) from 表名
    
    • 也可用于where子句作为筛选条件
       -- 获取员工起始名长度
       select first_name,length(first_name) from employees
       -- 查询起始名长度>5的员工信息
       select * from employees where length(first_name)>5
    
  3. sysdate、now

    • 获取当前系统时间
       select sysdate()|now()
    
    • dual:虚拟表,作用为语法占位,特点是从该表查询只会得到一个结果
      • from dual可省
       -- 查看当前系统时间
       select sysdate() from dual
       select now() -- from dual
    
  4. mod(值1,值2):获取值1%值2的结果。标准SQL中没有%

       -- 获取10%3的结果
       select mod(10,3) 
       -- 查询所有员工工资%10000的结果
       select employee_id,salary,mod(salary,10000) from employees
    
  5. date_format

    • 将日期转换为固定格式的字符串
       date_format(date,'format')
    
    • format日期格式:

      标识符含义
      %Y年(4位)
      %y年(2位)
      %m月(格式为01-12)
      %c月(格式为1-12)
      %d天(格式为01-30|31)
      %e天(格式为1-30|31)
      %H小时(格式为00-23)
      %k小时(格式为0-23)
      %i分钟(格式为00-59)
      %s秒(格式为00-59)
       -- 查询各个员工入职的年份
       select employee_id,hiredate,date_format(hiredate,'%Y')
       from employees
       -- 查询各个员工入职的年份和月份
       select employee_id,hiredate,date_format(hiredate,'%Y-%m')
       from employees
    
  6. str_to_date

    • 将日期格式的字符串转换为日期类型

        str_to_date('日期格式的字符串','format')
      
    
    ~~~sql
       -- 将'2022-12-06 17:32:19'转换为对应的日期类型
       select str_to_date('2022-12-06 17:32:19','%Y-%m-%d %H:%i:%s')
    

(5)排序

select 列名... from 表名
[where 条件]
order by 列名 排序规则

排序规则:asc(升序,默认值)|desc(降序)

where 先于 order by 运行
from -> where -> 

1.单列排序

  • 排序规则只有一列
-- 根据薪资进行从高到低的排序,查看结果
select * from employees order by salary desc
-- 查询工资大于10000的员工信息并对其按照薪资升序排列
select * from employees where salary>10000 order by salary 

2.多列排序

order by 列名1 排序规则1,列名2 排序规则2,...
  • 规则:先根据列1排,列1相同再根据列2排,以此类推
-- 根据员工工资进行降序排列,如果薪资相同,再根据员工id升序排序
select * from employees order by salary desc,employee_id asc

四、结语

MySQL是一种功能强大的关系型数据库管理系统,可以用于各种应用场景,如Web开发、数据分析等。通过学习MySQL基础知识和SQL语句,可以更加高效地管理和维护数据库,提升工作效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值