数据库
数据库概述
1、什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么?
数据库:英文单词DataBase,简称DB。按照一定格式存储数据的一些文件的组合。顾名思义:存储数据的仓库,实际上就是一堆文件,这些文件中存储了具有特定格式的数据。
数据库管理系统:DataBaseManagement,简称DBMS。数据库管理系统是专门用来管理数据库中的数据的,数据库管理系统可以对数据库当中的数据进行增删查改。常见的数据库管理系统:MYSQL、Oracle、MS、SqlServer、DB2、sybase等…
SQL:结构化查询语言(程序员需要学习SQL语句,编写SQL语句,然后DBMS负责执行SQL语句,最终来完成数据库中数据的增删查改操作。)
三者之间的关系:DBMS–执行–>SQL–操作–>DB
2、MYSQL常用命令:
- 查看有哪些数据库:show database;
- 选择使用某个数据库:use 数据库名;
- 创建数据库:create database 数据库名;
- 查看有哪些表:show tables;
- 查看表的结构:desc 表名;
- 查看mysql数据库的版本号:select version();
- 查看当前使用的是那个数据库:select database();
- mysql是不见";“不执行,”;"表示结束。
- \c用来终止一条命令的输入。
3、表(table)
- 数据库当中最基本的单元是表:table;数据库中是以表格的形式表示数据的。因为表比较直观。
- 行(row):被称为数据/记录。
- 列(column):被称为字段。
关于SQL语句的分类
SQL分类
- DQL:数据查询语言(凡是带有select关键字的都是查询语句)
- DML:数据操作语言(凡是对表当中的数据进行增删改的都是DML),insert(增)、delete(删)、update(改)
- DDL:数据定义语言(凡是带有create、drop、alter都是DDL),DDL主要操作的是表的结构,不是表中的数据。create(新建)、drop(删除)、alter(修改)。
- TCL:事务控制语言,commit(事务提交)、rollback(事务回滚)
- DCL:数据控制语言,grant(授权)、revoke(撤销权限)
简单查询
查询一个字段
select 字段名 from 表名;
查询多个字段
select 字段名,字段名 from 表名;
查询所有字段
select 字段名,字段名 from 表名;(每个字段都写上)
select * from 表名;(使用*号)
给查询的列起别名
select 字段名,字段名 as 别名 from 表名;
使用as关键字起别名。
注意:只是将显示的查询结果列名显示为别名,原列表名还是不变
记住:select语句是永远都不会进行修改操作的。(因为只负责查询)
as关键字可以省略吗?可以的
select 字段名,字段名 别名 from 表名;
假设起别名的时候,别名里面有空格,怎么办?
select 字段名,字段名 '别名' from 表名;
select 字段名,字段名 "别名" from 表名;
注意:在所有的数据库当中,字符串统一使用单引号括起来,单引号是标准,双引号在oracle数据库中用不了。但是在mysql中可以使用。
列参与数学运算
select 字段名,字段名*12 as 别名 from 表名;
举例,计算年薪
select 字段名,月薪*12 as 年薪 from 表名;
注意:别名为中文要加单引号'年薪'括起来。
条件查询
查询符合条件的数据,语法格式:
select 字段名 from 表名 where 条件;
条件:
- =等于
- <> 或 != 不等于
- <小于
- <= 小于等于
- >大于
- >=大于等于
- between …and…两个值之间,边界值也要取
- is null 为null(is not null不为空)
- and 并且
- or 或者
- not 取非,主要用在is或in中
- in 包含,相当于多个or(not in不在这个范围中)(注:in不是一个区间,后面是具体的值)
- like 为模糊查询,支持%或下划线匹配
- % 匹配任意个字符
- _ 一个下划线只匹配一个字符(如果查询带有_的字段时可以加转义字符\)
注意:and和or同时出现,and的优先级较高,如果想让or先执行,需要加“小括号”。
排序
单个字段排序
select 字段名 from 表名 order by 字段名;(默认是升序)
select 字段名 from 表名 order by 字段名 asc;(升序)
select 字段名 from 表名 order by 字段名 desc;(降序)
多个字段排序
select 字段名 from 表名 order by 字段名 asc 字段名 asc;(在前的为主导,只有相等时,才会考虑启用下一个字段排序)
根据字段位置排序
select 字段名 from 表名 order by 2;(2表示第二例,按照查询结果第二例排序)
注:了解即可,开发中不建议这样写,因为不健壮,因为列的顺序很容易发生改变,列顺序修改之后,2就废了。
综合案例
select * from 表名 where sal between 1250 and 3000 order by sal desc;(sal 为薪资字段)
单行处理函数
数据处理函数
数据处理函数又被称为单行处理函数,单行处理函数的特点,一个输入对应一个输出,和单行处理函数相对应的是:多行处理函数。(多行处理函数的特点:多个输入,对应一个输出)
常见的单行处理函数
lower()
转换小写
upper()
转换大写
substr (被截取的字段名,起始下标,截取长度)
取子串
length()
取长度
trim()
去空格
concat()
字符串的拼接
str_to_data ()
将字符串转换成日期
date_format ()
格式化日期
format()
设置千分位
round(值,保留小数位数)
四舍五入
rand()
生成随机数
ifnull()
可以将null转换成一个具体值
注:()里写字段名。
substr()的用法:
select substr(字段名,1,1)as 别名 from 表名;
注意:起始下标从1开始,没有0.
例题一:找出员工名字第一个字母是A的员工信息?
第一种方法:模糊查询
select 字段名 from 表名 where 字段名 like 'A%';
第二种方法:substr函数
select 字段名 from 表名 where substr(字段名,1,1)='A';
例题二:首字母大写?
select concat(upper(substr(字段名,1,1)),substr(字段名,2,length(字段名)-1))as
别名 from 表名 ;
trim()的用法:
select * from 表名 where 字段名=trim(' king');
结论:select后面可以跟某个表的字段名(可以等同看作变量名),也可以跟字面量/字面值(数据)。
例如:
select 1000 as 别名 from 表名;
select 'abc' as 别名 from 表名; //select后边直接跟字面量/字面值
round()的用法:
select round(1236.567,0)as 别名 from 表名; //保留整数
select round(1236.567,1)as 别名 from 表名; //保留1位小数
select round(1236.567,-1)as 别名 from 表名; //值为1240(往前保留一位)
ifnull()函数可以将null转换成一个具体值,
在所有数据库当中,只要有null参与运算的数学运算,最终结果就是null,为了避免这个现象,需要使用ifnull函数,
用法ifnull(数据,被当作那个值