SQL语句以分号结尾 ;
简单的查询语句(DQL)
select 字段名1,字段名2,字段名3…from 表名;
查询的时候可以用于数学运算:select 字段名1,字段名2,from 表名
给要进行数学计算的字段名重命名:select,字段名12 as’重命名’ from 表明; 数据库里字符串用单引号,不用双引号
对数据库的操作:
Create:创建 show create database 名字;
创建数据库语句可以加 if 判断语句 :create database if not exists 名称;如果有这个名字的数据库就不会创建;
创建数据库指定字符集:create database 名字 character set gbk;
create database if not exists 要创建的数据库名称 character set gbk; 把上边两种创建整合先判断是否存在,不存在的话在创建并指定字符集;
Retrieve:查询
查询所有数据库名称:show databases; 有个s 查询有创建没有
查询某个字符集:show create database 数据库名称;
Update:修改
修改数据库的字符集: alter database 数据库名称 character set 字符集名称;
Delete:删除
删除数据库:drop database 数据库名称;
当数据库存在在删除:drop database if exists 数据名称;
使用数据库 查询某个数据库的字符集 show create database 数据库名;
查询当前正在使用的数据库名:select database(); 使用的数据库 use 数据库名;
操作库
C(create) 创建
创建表语法:create table 表名(
列名1 数据类型1,
列名2 数据类型2,
…最后一列不需要加逗号
);
复制表:create table 表名 like 被复制的表名;
mysql> create table stubent( //创建学生表
-> id int, //学生编号 -> name varchar(32), //学生名字 -> age int, //学生年龄 -> score double(4,1), //学生 -> birthday date, //出生日期 -> insert_time timestamp //记录信息的时间 -> );
数据库数据类型:
字符串类型:varchar 字符串 varchar(20)这个字符串里有20个字符 |
R(retrieve)查询 |
查询某个数据库的表名称:show tables; |
查询表结构:desc 表名; |
U(update)修改 |
修改表名:alter table 表名 rename to 新的表名; |
修改表的字符集:alter table 表名 character set 字符集名; |
添加一列:alter table 表名 add 列名 数据类型; |
修改列名称 类型:alter table 表名 change 列名 新列名 新的数据类型; |
修改类型:alter table 表名 modify 列名 新数据类型; |
删除列:alter table 表名 drop 列名; |
D(delete)删除 |
删除: drop table 表名 先判断有没有表在删除 drop table if exists 表名 |
DML增删改表中的数据 |
添加数据:insert into 表名(列名1,列名2…)values(值1,值2…); |
注意:不定义列名,则默认给所有进行赋值 |
删除数据:delete from 表名 [whrtr 条件] DELETE FROM student;删除所有 TRUNCATE TABLE 表名; 先删除表,在创建一张一摸一样的 |
修改数据:update 表名 set 列名1 = 值1,列名2 = 值2…where 条件; |
DQL 查询表中的记录 |
查询所有:select * from 表名; |
1查询的语法:select |
字段名称 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定
2基础查询
列名 数据类型;
多个字段查询:select 字段名1,字段名2…from 表名;
去除重复的结果集(查询结果):SELECT DISINCT 列名 FROM 表名;
查询谁 xxx的这种两个内容:SELECT NAME , 列名1,列名2 FROM 表名;
列值的计算包含NULL值计算:SELECT NAME 列名1,列名2,列名1+IFNULL(列名2,0) FROM 表名;
起别名:SELECT NAME 列名1,列名2,列名1+IFNULL(列名2,0) AS 名字 FROM 表名;
3条件查询
where子句后跟条件
格式:SELECT * FROM 表名 WHERE 要进行比较的列名 运算符 条件;
运算符:> < <= >= = <>(<>这个表示不等于,在MYSQL中也可以使用 != 但是不可以使用==)
BETWEEN 包括 age >=20 AND age<=30; 等于 BETWEEN 20 AND 30;
and && 与 or || 或 not ! 非
模糊查询:LIKE 占位符:_:表示一个字符 %:表示多个字符 SELECT * FROM 表名 WHERE 表名 LIKE ‘马%’; 查询带有马字
SELECT * FROM 表名 WHERE 表名 LIKE ‘_化%’; 查询中间有化字的
排序查询:
语法:order by 排序字段1 排序方式1,排序字段2 排序方式2; 如果前边的条件值一样时,才会判断第二条件;
单个排序方式: ASC:升序
DESC 降序
聚合函数:将一列数据作为一个整体,进行纵向计算 聚合函数的计算排除 空 解决方案: IFNULL函数
语法:count:计算个数 SELECT COUNT(列名) FROM 表名;
max:计算最大 SELECT MAX(列名) FROM 表名;
min:计算最小 SELECT MIN(列名) FROM 表名;
sum:计算和 SELECT SUM(列名) FROM 表名;
avg:计算平均值 SELECT AVG(列名) FROM 表名;
分组查询:
语法:group by 分组字段; SELECT sex,AVG(math) FROM student GROUP BY sex; 意思是查询男女同学的数学平均数
注意:分组之后查询的字段:分组字段,聚合函数
where 和 having where在分组之前进行限定,如果不满足条件则不参与分组 不能进行聚合函数的判断
having在分组之后进行限定,如果不满足结果,则不会被查询出来 可以进行聚合函数的判断
分页查询:
语法:limit 开始的索引 每页查询的条数; SELECT * FROM student LIMIT 0,3; 看前三个 后边的3是每页显示3条记录。
公式:开始的索引 = (当前的页码 减 1)* 每页显示的条数
分页操作是一个方言: limit只能在MYSQL里面用。
表的约束:
对表中的数据进行限定,保证数据的正确性,有效性和完整性 把约束放在后面就添加成功
分类:主键约束:primary key 含义:非空且唯一 一张表只能有一个字段为主键,主键就是表中记录的唯一表识
创建时添加 删除主键约束:ALTER TABLE 名 DROP PRIMARY KEY;
非空约束:not null 创建表添加约束 可创建之后添加
唯一约束:unique 不许重复 删除约束:ALTER TABLE 表名 DROP INDEX 列名;
外键约束:foreign key 语法: create table 表名( .......... 外键列 constraint 外键名称 foreign (外键名称) references 主表名称(主表列名称) ); 删除外键:ALTER TABLE 表名 DROP FOREIGN KEY 外键名;
创建表之后添加外键:ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN (dep_id) REFERENCES department(id)
级联操作:联动操作
添加级联操作:
语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称
FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE;
分类:级联更新:ON UPDATE CASCADE
级联删除:ON DELETE CASCADE
CREATE TABLE department( id INT PRIMARY KEY AUTO_INCREMENT, dep_name VARCHAR(20), dep_locationion VARCHAR(20) ); CREATE TABLE employee( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT, dep_id INT, CONSTRAINT emp_dept_fk FOREIGN KEY(dep_id) REFERENCES deparment(id) ); INSERT INTO department VALUES(NULL,'研发部','广州'),(NULL,'销售部','深圳'); INSERT INTO employee(NAME,age,dep_id) VALUES('张三',20,1); INSERT INTO employee(NAME,age,dep_id) VALUES('李四',21,1); INSERT INTO employee(NAME,age,dep_id) VALUES('王五',22,1); INSERT INTO employee(NAME,age,dep_id) VALUES('老王',23,2); INSERT INTO employee(NAME,age,dep_id) VALUES('大王',24,2); INSERT INTO employee(NAME,age,dep_id) VALUES('小王',25,2); SELECT * FROM employee; SELECT * FROM department;