数据库基本概念
1.DataBase,简称:DB
2.含义:用于存储和管理数据的仓库
3.特点:
1.持久化存储数据,数据库在本质上是一个文件系统
2.方便存储和管理数据
3.使用同一的方式操作数据库——SQL语言
4.常见数据库软件
1.oracle
2.MySQL
3.Microsoft SQL Server
...
#SQL
1.什么是SQL?
Structured Query Language:结构化查询语言
通俗来说,是定义了操作所有关系型数据库的规则。
每一种数据库操作的方式存在不同的地方,称作“方言”
2.SQL通用语法
1.SQL语句可以单行或多行书写,以分号结尾。
2.使用空格和缩进来增强语句的可读性。
3.MySQL数据库的SQL语句不区分大小写,但关键字建议大写
4.注释
单行注释:-- 注释内容、# 注释内容
多行注释: /* 注释 */
3.SQL分类;
1)DDL(Data Difinition Language): 数据定义语言,一般用来库和表头的创建和删除;
关键字:create、drop、alter等
2) DML(Data Manipulation Language): 数据操作语言,一般用来做表中数据的增、删、改;
关键字:insert、delete、update
3) DQL(Data Query Language): 数据查询语言,一般用来做表中数据的查;
关键字:select、where
4) DCL(Data Control Language): 数据控制语言,一般是DBA才会用到的数据库用户管理及日常维护语言。
关键字:GRANT、REVOKE
##DDL:操作数据库、表
1.操作数据库
1.创建:
*创建数据库:
create database 数据库名;
*创建数据库,判断不存在,再创建:
create database if not exists 数据库名;
*创建数据库,判断不存在,再创建,并指定字符集:
create database if not exists 数据库名 character set 字符集;
2.查询:
*查询所有数据库的名称:
show databases;
*查询数据库的字符集:查询数据库的创建语句
show create database 数据库名;
3.修改:
*修改数据库的字符集
alter database 数据库名 character set 字符集;
4.删除:
*删除数据库
drop database 数据库名;
*判断数据库是否存在,存在再删除
drop database if exists 数据库名;
5.使用:
*查询当前正在使用的数据库名称
select database();
*使用数据库
use 数据库名;
2.操作表
1.创建:
*创建表
create table 表名(
列名1 数据类型,
列名2 数据类型,
列名3 数据类型,
...
列名n 数据类型
);
**时间戳类型:包含年月日时分秒,此字段一般不赋值,使用当前默认时间
*复制表(创建表2,结构与表1一样)
create table 表名2 like 表名1;
2.查询:
*查询数据库中所有表的名称
show tables;
*查询表结构
desc 表名;
*查询表的字符集
show create table 表名;
3.修改:
1.修改表名
alter table 表名 rename to 新表名;
2.修改表的字符集
alter table 表名 character set 字符集;
3.添加一列
alter table 表名 add 列名 数据类型;
4.修改列名称、类型
alter table 表名 change 原列名 新列名 新类型;
alter table 表名 modify 列名 新类型;
5.删除列
alter table 表名 drop 列名;
4.删除:
*删除表
drop table 表名;
*判断表是否存在,存在再删除
drop table if exists 表名;
DML:增删改表中数据
1.添加数据
语法:
insert into 表名(列名1,列名2,...,列名n) values(值1,值2,...,值n);
注意:
1.列名与值相对应
2.如果不定义列名,则默认给所有列添加值
insert into 表名 values(值1,值2,...,值n);
3.除了数字类型,其他内容需要是要引号
2.删除数据
语法:
delete from 表名 [where条件];
注意:
1.如果没有条件,则会删除所有记录。
2.如果需要删除所有记录
1.delete from 表名; --不推荐使用,有多少条记录就会执行多少次,效率低
2.truncate table 表名; --推荐使用,删除表,并创建一个结构相同的空表,效率较高
3.修改数据
语法:
update 表名 set 列名1 = 值1,列名2 = 值2,... [where 条件]
注意:
1.如果没有条件,则会修改所有记录。一般不会使用
DQL :查询表中的记录
CREATE TABLE stu (
id int, -- 编号
name varchar(20), -- 姓名
age int, -- 年龄
sex varchar(5), -- 性别
address varchar(100), -- 地址
math int, -- 数学
english int -- 英语
);
INSERT INTO stu(id,NAME,age,sex,address,math,english) VALUES
(1,'马云',55,'男', ' 杭州',66,78),
(2,'马化腾',45,'女','深圳',98,87),
(3,'马景涛',55,'男','香港',56,77),
(4,'柳岩 ',20,'女','湖南',76,65),
(5,'柳青',20,'男','湖南',86,NULL),
(6,'刘德华',57,'男','香港 ',99,99),
(7,'马德',22,'女','香港',99,99),
(8,'德玛西亚',18,'男','南京',56,65);
1.语法:
select 字段列表
from 表名列表
[where 条件列表]
[group by 分组字段]
[having 分组之后的条件限定]
[order by 排序]
[limit 分页限定]
2.基础查询
1.多个字段的查询
select 字段1, 字段2, ... from 表名;
--查询 姓名、年龄
SELECT name,age from stu;
注意:
如果查询所有字段,使用*代替字段列表
SELECT * FROM stu;
2.去除重复
distinct:
--去除重复结果集
SELECT DISTINCT address FROM stu;
3.计算列
一般使用四则运算计算一些列的值,一般只会进行数值的计算
ifnull(表达式1,表达式2) :null参与的运算,计算结果为null
判断表达式1是否为null,如果是,就用表达式2替换
--计算math、English分数之和
SELECT name,math,english, math + english FROM stu;
--如果有null参与的运算,计算结果为null
SELECT name,math,english, IFNULL(math,0) + IFNULL(english,0) FROM stu;
4.起别名
as:可省略
--起别名
SELECT name,math 数学,english 英语, IFNULL(math,0) + IFNULL(english,0) 总分 FROM stu;
3.条件查询
1. where子句后跟条件
2. 运算符
* >、<、<=、>=、=、<>
--查询年龄大于20的
SELECT * FROM stu WHERE age > 20;
--查询年龄大于等于20的
SELECT * FROM stu WHERE age >= 20;
--查询年龄等于20的
SELECT * FROM stu WHERE age = 20;
--查询年龄不等于20的
SELECT * FROM stu WHERE age != 20;
SELECT * FROM stu WHERE age <> 20;
* BETWEEN...AND
--查询年龄大于等于20且小于等于30
SELECT * FROM stu WHERE age >= 20 && age <= 30;
SELECT * FROM stu WHERE age >= 20 and age <= 30;
SELECT * FROM stu WHERE age BETWEEN 20 and 30;
* IN(集合)
--查询年龄22、18、25
SELECT * FROM stu WHERE age = 18 OR age = 22 or age = 25;
SELECT * FROM stu WHERE age = 18 || age = 22 || age = 25;
SELECT * FROM stu WHERE age IN (18,22,25);
* LIKE :模糊查询
* 占位符:
* _:单个任意字符
* %:多个任意字符
* IS NULL、IS NOT NULL
--查询英语成绩为null null不能使用判断
SELECT * FROM stu WHERE english IS NULL;
SELECT * FROM stu WHERE english IS NOT NULL;
* and 或 &&
SELECT * FROM stu WHERE age >= 20 && age <= 30;
SELECT * FROM stu WHERE age >= 20 and age <= 30;
* or 或 ||
--查询年龄22、18、25
SELECT * FROM stu WHERE age = 18 OR age = 22 or age = 25;
SELECT * FROM stu WHERE age = 18 || age = 22 || age = 25;
* not 或 !