数据库----基础应用
1.概述
把数据存储到一个容器里,组织数据,存储数据,管理数据的仓库。
关系型数据库:数据间有关联关系的
特点:数据以表格的形式出现
每行为各种记录
每列为字段所对应的数据域
许多的行和列组成一张表单
若干的表单组成数据库
具体有:Oracle、MySQL、
常用术语:
1.数据库是一些关联表的集合
2.数据表:表是数据库的基本组成单元,数据的矩阵,所有的数据都已表格的形式组织。
3.列:一列数据元素包含了相同类型的数据====字段
4.行:一行(记录)是一组相关的数据,某条记录的具体信息====数据/记录
5**.主键:主键是唯一的,一个数据表中只能有包含一个主键,可以使用主键查询数据**
6.外键:外键用于关联两个表
2.MySql
1.概述
存储和管理(行和列的表格)关系型数据
2. SQL语言(不区分大小写)
结构化查询语言,是一种特殊目的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
标准的SQL适合于所有的数据库产品。
DBMS负责执行SQL语句,通过执行SQL语句操作DB中的数据。
3.数据库的操作
所有的数据库名,表名,表字段都是区分大小写的,输入SQL命令是要注意。
a.操作数据库
a. 1 创建数据库
create database 数据库名;
a. 2 删除数据库:
drop database 数据库名;
a. 3展示所有数据库
show databases ;
(MySQL的命令,不是SQL语句)
a. 4 选择数据库
在用 SQL 语句新建表之前,要选择数据库,即确定表是往哪个数据库里创建。
use 数据库名;
(MySQL的命令,不是SQL语句)
b.操作表
b. 1 创建表
create table 表名 (
字段名称1 字段类型 (最大长度),
字段名称2 字段类型 (最大长度),
);
数据库里的字符串类型为 ---- varchar
b. 2 展示数据库里的所有表
show tables ;
(MySQL的命令,不是SQL语句)
b. 3 删除表
drop table 表名 ;
用工具写sql语句,每条语句后面加分号,表示一条语句的结束,就可以选中后多行执行,
若不加分号则表示语句没有结束,多行选择执行会发生错误,只能一行一行执行。
**b. 4 查看表结构**
不看表中的数据,只看表的结构
desc 表名;
c. 数据的操作
c. 1新增数据:
默认向表里的每个字段都赋值:
insert into 表名 values(字段1的值,字段2的值,字段3的值);
插入数据,括号里需要指定每个字段的值,而且,值的顺序要和字段的顺序一致
字符串类型的数据插入时要用一对英文单引号引起来。
向表里指定字段赋值:
(注意: 指定字段 不论只有一项还是多项,都要加括号,要赋的值无论几项也要加括号)。
insert into 表名 (指定字段1,指定字段2) values (字段1的值,字段2的值);
c .2 查询数据:
查询表的所有列的数据
select * from 表名;
查询表的指定列(字段)的数据
select 字段1,字段2 from 表名;
c . 3 修改/更新数据
未加修饰,会把表中某一字段的所有值都修改为设置的值。
update 表名 set 字段 = 设置的值;
**c . 3 删除数据**
未加修饰,会删除表里的所有数据/记录:
delete from 表名;
4.数据类型(描述字段):
1.命名规则:
字段名必须以字母开头
长度不能超过30个字符
不能使用保留字
只能使用大写字母,小写字母,数字,_ ,$
多个单词用下划线隔开
2.字符类型:
char:括号内是代表的字符个数,长度固定,不足时使用空格填充,查询效率高
varchar:括号内是代表的字符个数,长度可变,实际存几位,就占几位,节省空间,查询效率低
3.数字类型:
int、int(3) oracle不支持,其使用number替代
numeric(5,2) 3位整数,2位小数
decimal和numeric日常理解为等效
4.日期类型:
date:包含年 ,月 ,日
time:包含时 ,分 ,秒
datetime:包含年 ,月 ,日 ,时 ,分 ,秒
timestamp:时间戳,不是日期,是从1970.01.01到指定日期的毫秒数。
5.字段约束:
1.主键约束:
**primary key,**如果为一个列添加了主键约束,这个列就是主键。
被设为主键的字段,值唯一且不能为空。
**使用:**在创建表时,声明字段名称,字段类型后,添加 primary key。
主键是唯一的,用过以后要不会再用,就算是删除里记录以后,也不会使用被删除的记录的主键。
2.非空约束:
not null ,如果为一个列添加了非空约束,那么这个列的值就不能为空,但可以重复。
**使用:**在创建表时,声明字段名称,字段类型后,添加 not null 。
3.唯一约束:
unique, 如果为一个列添加了唯一约束,那么这个类的值就必须是唯一的,不能重复的,但可以为空。
**使用:**在创建表时,声明字段名称,字段类型后,添加 unique 。
例子:
CREATE TABLE tb_user(
id INT(10) PRIMARY key ,
username VARCHAR(50) not null UNIQUE,
sex VARCHAR(30),
phone VARCHAR(11) not NULL,
age int(3),
price double (10)
);
insert INTO tb_user VALUES (1,'jane','female','010-01200',18.56);
insert INTO tb_user VALUES (2,'jack','male','010-01201',19,79.54);
INSERT into tb_user VALUES (3,'rose','female','010-01202',22,21.33);
INSERT into tb_user VALUES (4,'jennie','female','010-01203',23,100.18);
INSERT into tb_user VALUES (5,'mark','male','010-01204',18,99.7);
6.基础函数:
单行处理函数:一行一行处理,一个输入,一个输出
-
upper( ):
括号内填写指定字段名,将指定字段的值都转换为大写
SELECT username , UPPER (username)
from tb_user ;
-
lower( ):
括号内填写指定字段名,将指定字段的值都转换为小写
SELECT username,LOWER(username)
from tb_user;
-
length( ):
括号内填写指定字段名,统计指定字段的每一个数据的长度。
SELECT username, LENGTH(username)
from tb_user;
-
substr( ):
截取子串,将指定字段的每一个数据都截取一个子串,
括号内有三个参数:指定字段,开始位置,截取长度。
注意:此处的位置下标是从 1 开始的。
SELECT username ,SUBSTR(username, 2,2)
from tb_user;
-
concat( ):
在指定字段的每一个数据后,拼接上指定的数据
括号内有两个参数:指定字段名,要拼接的指定数据(可以不是字符串类型)
SELECT username ,CONCAT(username,'LOVE')
FROM tb_user;
-
replace( ):
将指定字段的每一个数据里字符替换成另一个字符。
括号里有三个参数:指定字段名,替换前的字符,想要替换成的字符。
SELECT username ,REPLACE(username,'a','e')
from tb_user;
-
round( ) , ceil ( ) , floor( )
round( ) :四舍五入取整,括号内填写指定字段名
round ( ) : 四舍五入,括号有两个参数:指定字段,保留几位小数
SELECT price ,ROUND(price),ROUND(price,1)
from tb_user;
ceil ( ) :向上取整,括号内填写指定字段名
floor ( ):向下取整,括号内填写指定字段名
SELECT price ,CEIL(price),floor(price)
from tb_user;
-
now( ) , curdate ( ) , curtime ( )
now( ) :获取当前时间
curdate ( ) :获取当前时间的年月日
curtime ( ) :获取当前时间的时分秒
SELECT NOW(),CURDATE(),CURTIME();
-
**year( ) month( ) day( ) **
**hour( ) minute( ) second( ) **
从获取到的时间里,解析出年,月,日,时,分,秒
SELECT YEAR(NOW()),MONTH(NOW()),DAY(NOW()),
HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());
10.转义字符
有些字符在SQL语言中有特殊的含义,但是但向使用符号的一般含义时,就需要进行转
select 'ab'cd' -- 单引号是一个SQL语句的特殊字符
select 'ab\'cd' --数据中有单引号时,用一个\转义变成普通字符
-
trim( ):
去除字符串的前后空格
SELECT *
from tb_user
WHERE username=TRIM(' jennie ');
-
rand( ):
生成 0 ~ 1 之间的随机数
-
case …when 1…then 2…when 3… then 4…else 5 …end
case匹配某字段,当字段值为1时,执行2
当字段值为3时,执行4
7.条件查询
- where 条件查询
在查询时,用where 加条件,过滤数据
SELECT username
from tb_user
where id=4;
可以有多个条件,条件间为 与关系 -------- and
条件间为 或关系 -------- or
SELECT username
from tb_user
where id=3 or age=18;
-
**distinct **
使用 distinct 关键字,去除重复的记录行
SELECT DISTINCT sex from tb_user;
-
**like **
用于 模糊查询, 通配符%-----代表0到n个字符,通配符下划线__------代表1个字符
SELECT username
from tb_user
where username like '%e%';
SELECT username
from tb_user
where username LIKE '_a%';
-
**null **
is null :过滤字段值为空的数据
is not null :过滤字段值不为空的数据
-
between and
过滤出字段值在 … 范围之间的数据( 包含两边界)
SELECT price
from tb_user
where price BETWEEN 20 and 90;
-
limit
起分页作用
limit 后直接跟一个数字 n: 返回查询的前 n 条
limit 后直接跟两个数字 m , n :从第 m 条开始,展示 n 条。
注意:limit 与后面的数字 之间 没有括号
此时对于记录来说,是从0开始计数的
SELECT *
from tb_user
LIMIT 3;
SELECT *
from tb_user
LIMIT 2,2;
-
order by
给数据 按指定的字段 进行 排序,默认升序 ,加 desc 后 降序
SELECT price
FROM tb_user
ORDER BY price
SELECT price
FROM tb_user
ORDER BY price DESC;
-
ifnull( )
判断字段值是否为null,若为空,就用设置的值代替。
括号内有两个参数:字段名 ,设置的默认值
9.补充
select 后面的字段 可以进行运算,字段名自动设为整个表达式
SELECT price ,price*2
from tb_user;
若是想给字段重新命名,就在字段名后加 AS ,再加新的字段名( AS 可以省略)
SELECT price ,price*3 AS allPrice
from tb_user;
8.聚合函数:
聚合函数/分组函数:多个输入,一个输出
分组函数必须在分组后才可以使用,如果没有具体写如何分组,默认整张表分了一个组
-
count( )
count( * ) / count( 1 ): 统计记录总数。
SELECT COUNT(*)
FROM tb_user;
count( 字段 ):按照字段统计记录数,但只统计字段值不为null的记录。
-
max( ) / min( )
max( ) :求指定字段的最大值
min( ) :求指定字段的最小值
SELECT MAX(price),MIN(age)
from tb_user;
-
sum ( ) / avg ( )
sum ( ) :求指定字段的总和
avg ( ) :求指定字段的平均值
SELECT SUM(price),AVG( age)
from tb_user;
SELECT MAX(price)
from tb_user
GROUP BY age;
-
having
将分组后的数据进一步进行过滤,having不能替代where
having只能和 group by 联合使用
SELECT age ,MAX(price)
from tb_user
GROUP BY age
HAVING MAX(price)>50
关键字的执行顺序:(不可颠倒)
-
from 从哪张表里
-
where 先经过where条件筛选出有价值的数据
-
group by 对这些有价值的数据进行分组
-
having 分组之后可以使用having继续筛选
-
select select查询出来
-
order by 最后排序输出
where后不能使用聚合函数,因为聚合函数必须分组后才可以使用,
但是在执行where时还没有分组。