1、数据库概述

数据库库是存储、调用、分析数据的仓库,主要分为关系型数据库管理系统(RDBMS)与非关系型数据库管理系统两类

  • 关系数据库是数据库应用的主流
  • 关系型数据库以行和列的形式存储数据,这一系列的行和列被称为表,一组表组成数据库。
  • 目前主流关系型数据库有Oracle、DB2、Microsoft SQL Server、MySQL等。

操作关系型数据库时使用的语言叫结构化查询语句,简称SQL结构化查询语言。

2、数据定义语言DDL

数据定义语言是用来对数据库管理系统中的对象进行“增删改查”操作的SQL语句,一般应用DDL语言对数据库不同对象进行定义操作时,需要提前具备相应数据库管理权限。

  • 针对数据库对象的操作语言
  • 针对数据表对象的操作语言

3、数据库基本命令

定义数据库

  • 创建数据库:create database 数据库名称;
  • 查看数据库:show create database 数据库名称;
  • 查看数据库列表:show databases;
  • 使用数据库:use 数据库名称;
  • 删除数据库:drop database 数据库名称;

数据表-增删改查

  • 创建数据表:create table 表名;
  • 使用test数据库:use test;
  • 创建员工信息表:

     

create table emp(
                depid char(3),
                depname varchar(20),
                  peoplecount int);
  • 查看表是否创建成功:show tables;
  • 删除数据表:drop table emp;
  • 自增字段:        

  

create table emp(
                id int primary key auto_incerment,
                name varchar(4) not null,
                  math int default 0,
                 minmax float unique);

数据表-约束条件

  • 主键约束

        单字段主键

   

create table emp(
primary key,
                depname varchar(20));

        多字段主键

       

create table emp(
     depid char(3) primary key,
                depname varchar(20)
                peoplecount int,
primary key(depname,depid));
  • 非空约束   

      

create table emp(
                depid char(3),
not null,
                peoplecount int);
  • 唯一性约束

       

create table emp(
primary key,
not null,
                peoplecount int unique);
  • 默认约束

        

create table emp(
primary key,
default,
                peoplecount int unique);

数据表-修改数据表

  • 修改数据表名:alter table emp rename emodep;
  • 修改数据类型:alter table empdep modify depname varchar(30);
  • 修改字段名:alter table empdep change depname dep varchar(30);
  • 修改字段名+字段类型:alter table empdep change dep depname  varchar(20);
  • 添加新字段+添加约束条件:alter table empdep add maname varchar(10) not null;
  • 修改字段排列顺序:
  • 将顺序放第一位:alter table empdep modify maname varchar(10) first;
  • 将a顺序放b顺序之后:alter table empdep modify maname varchar(10) after depid;
  • 删除字段:alter table empdep drop maname;

数据库操作语言DML

  • 数据填充insert/load:
  • 插入数据: insert into 表名(字段1,字段2,...) values ......
  • 导入外部数据: load data local infile '文件路径.txt' into table Mon fields terminated by '\t' ingore 1 lines;
  • 数据修改update:
  • 为字段赋值:update 表名 set 字段名 = 值;

               

eg:update fruits set f_name = concat('fruit_',f_name);
  • 数据删除delete:
  • 删除某字段:delete from fruits where f_id = 'b5';

数据库查询

  • select 查询语法

     

select <目标列表组> from <数据源表名> where <元组选择条件>
                                                                          group by <分列组> having <组选择条件>
                                                                           order by <排序列1>  <排序要求1>;
  • 多表查询

        将两个以上的数据表通过关键字段连接在一起,并从不同表中选取不同字段进行查询的方法

     

select a_list1,a_list2,a_list3,b_list1,b_list2,b_list3,concat(a_list1,b_list1)
                                from a join b on a.key = b.key
  • 内连接:select <sekect_list> from a inner join b on a.key=b.key;
  • 左连接:select <sekect_list> from a left join b on a.key=b.key;
  • 右连接:select <sekect_list> from a right join b on a.key=b.key;
  • 联合查询:select a.* from a union all select b.* from b
  • 全连接查询:

       

select * from a left join  b on key1=key2 union select * from a right join  b on key1=key2
  • 子查询:写在()中,把内层查询结果当做外层查询参照的数据表来用

查询操作符

and:用来联合多个条件进行查询,条件与条件之间是“和/且”的意思;

or:用来联合多个条件进行查询,条件与条件之间是“或”的意思;

in:判断某个字段的值是否在指定的集合中,若在指定集合中则满足查询条件,若不在则不满足;

between:判断某个字段的是否在指定的范围内,若在则满足查询条件,若不在则不满足;

like:用来匹配字符串是否相等,如果与指定的字符串相匹配,则满足查询的条件,否则不满足;

is null:用来判断字段的值是否为空值(null),如果为空值则满足查询条件,否则不满足;        

                其中not是可选参数,加上not表示字段不是空值是满足条件。

distinct:用来消除重复记录,达到数据去重作用;

  • 操作符合子查询组合应用

        any:表示满足其中任意一个条件即可

any
                                         (select id from fruits where price between 10 and 20);

        all:表示满足所有条件才满足:

all
                                         (select price from fruits where price<=20);

        exist:表示存在:select * from fruits where exist (select * from fruits where price>20);

as:可以将表和字段名重新命名为别的名称使用,只在查询中有效

limit:查询后只显示limit指定数字的行数结果

4、数据库常用函数

  • 数学函数

abs(x)

绝对值

bin(x)

二进制(oct返回八进制,hex返回十六进制)

exp(x)

e的x次方

greatest(x1,x2,x3,...,xn)

最大值

least(x1,x2,x3,...,xn)

最小值

ln(x)

x的自然对数

log(x,y)

x的以y为底的对数

mod(x,y)

x/y的模(余数)

pi()

pi的值(圆周率)

rand()

0-1内的随机值

可以提供一个参数使随机数生成器生成一个指定值

floor(x)

小于x的最大整数值(去掉小数取整)

ceiling(x)

大于x的最小整数值(进一取整)

round(x,y)

参数x的四舍五入的有y位小数的值(四舍五入)

truncate(x,y)

x截短为y为小数的结果

sign(x)

数字x的符合值(正数为1,负数为-1,0为0)

sqrt(x)

平方根

  • 字符串函数

ascii(char)

ascii码值

bit_length(str)

字符串的比特长度

concat(s1,s2,...,sn)

将s1,s2,...,sn连接成字符串

insert(str,x,y,instr)

将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果

find_in_set(str,list)

如果发现str,返回str在list中的位置

lcase(str)/lower(str)

将所有大写字母给为小写

ucase(str)/upper(str)

将所有小写字母给为大写

left(str,x)

最左边的前x个字符

right(str,x)

最右边的后x个字符

length(str)

字符长度数

position(substr,str)

子串substr在字符串str中第一次出现的位置

quote(str)

用反斜杠转义str的单引号

repeat(str,srchstr,rpicstr)

str重复x次的结果

reverse(str)

颠倒字符str

rtrim(str)

去掉字符串str开头的空格

trim(str)

去掉字符串str开头和结尾的所有空格

  • 日期及时间函数

date_format(date,fmt)

依照指定的fmt格式格式化日期date值

from_unixtime(ts,fmt)

依照指定的fmt格式,格式化unix时间戳ts

monthname(date)

返回英文月份名(eg:October)

dayname(date)

返回英文星期名(eg:Monday)

now()

当前日期和时间

curdate()/current_date()

当前日期

curtime()/current_time()

当前时间

quarter(date)

date在一年当中的季度(1-4)

week(date)

date在一年当中的第几周(0-53)

dayofyear(date)

date在一年当中的第几天(1-366)

dayofmonth(date)

date在一个月当中的第几天(1-31)

dayofweek(date)

date在一周当中的第几天(1-7)

year(date)

年份

month(date)

月份

day(date)

天数部分

hour(time)

小时值

minute(time)

分钟值

second(time)

秒值

date(datetime)

日期值

time(datetime)

时间值

  • 逻辑函数
  • 空值函数
  • ifnull(expression,alt_value)
  • 判断函数
  • if(expr1,expr2,expr3)
  • 逻辑表达式
  • case when expr1 then expr2 [when expr3 then expr4 ... else expr] end;
  • 开窗函数

                                select *,avg(sal) over() 平均工资 from emp;

                (2)partition by 子句:如查询各部门的平均工资

                               

select *,avg(sal) over(partition by deptno);
  • 其他函数

group_concat(col)

由属于一组的列值连接组合而成的结果

cast()

将一个值转换为指定的数据数据

数据表ER图

E-R图也称实体-联系图(Entity Relationship Diagram),用来描述现实世界的概率模型。