基本操作:
查看所有数据库名称:show databases;
切换数据库:USE mydb1,切换到mydb1数据库;
操作数据库
创建数据库:CREATE DATABASE [IF NOT EXISTS] mydb1;
加上if not exists ,在名为mydb1的数据库不存在时创建该库,这样可以避免报错
删除数据库:DROP DATABASE [IF EXISTS] mydb1;
删除mydb1的数据库,如果加上if exists,如果这个数据库不存在,则会报错,反之,不会报错
修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET utf8
操作表
创建表:CREATE TABLE 表名(
列名 列类型
列名 列类型
)
例如:CREATE TABLE stu (
sname varchar(20),
sage int ,
)
查看当前表数据库的所有表名称:show tables;
查看指定表的创建语句:show create table stu;
查看表结构:desc stu;
删除表:drop table stu;
1. 修改之添加列:给stu表添加classname列:
ALTER TABLE stu ADD (classname varchar(100));
2. 修改之修改列类型:修改stu表的gender列类型为CHAR(2):
ALTER TABLE stu MODIFY gender CHAR(2);
3. 修改之修改列名:修改stu表的gender列名为sex:
ALTER TABLE stu change gender sex CHAR(2);
4. 修改之删除列:删除stu表的classname列:
ALTER TABLE stu DROP classname;
5. 修改之修改表名称:修改stu表名称为student:
ALTER TABLE stu RENAME TO student;
插入数据
insert into 表名(sname,sage,sbirthday)values('张三','12','19970620');
修改数据
update 表名 set 列名1=值1,列名n=值n where 条件
update stu set sname='lisi',sage='22',sbirthday='19970630'where sname='zhangsan';
删除数据
delete from 表名 where 条件
delete from stu where sname='lisi';
truncate table 表名
truncate table stu;
查询表中所有列
select * from stu;
查询指定列
select sid,sname,age from stu;
条件查询
=、!=、<>、<、<=、>、>=;
BETWEEN…AND;
IN(set);
IS NULL;
AND;
OR;
NOT;
1.举例:
再stu下查询性别为女并且年龄小于50的记录
select * from stu where sex='nv' and age<50;
模糊查询
当想要查询姓名中包含a字母的学生的学生时就需要使用模糊查询了,模糊查询需要使用关键字like’
举例:查询姓名由5个字母构成的学生记录
select * from stu where sname like '_____';
模糊查询必须使用LIKE关键字。其中 “_”匹配任意一个字母,5个“_”表示5个任意字母。
查询姓名以“z”开头的学生记录
select * from stu where sname like 'z%';
其中“%”匹配0~n个任何字母。
字段控制查询
去除重复记录
select distinct sal from emp;
查看两列之和
SELECT *,sal+comm FROM emp;(要包装两列类型都是数值类型)
SELECT *,sal+IFNULL(comm,0) FROM emp;(有一列有数值为null时用这个)
给列名添加别名
select*,sal+ifnull(comm,0)as total from emp;
排序
举例
(按年龄进行升序排序)
select * from stu order by age asc ;
(按年龄降序排序)
SELECT * FROM stu ORDER BY age DESC;
(查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序)
SELECT * FROM emp ORDER BY sal DESC,empno ASC;
聚合函数
聚合函数是用来做纵向运算的函数:
COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
COUNT
当需要纵向统计时可以使用COUNT()。
查询emp表中记录数:
SELECT COUNT(*) AS cnt FROM emp;
查询emp表中有佣金的人数:
SELECT COUNT(comm) cnt FROM emp;
注意,因为count()函数中给出的是comm列,那么只统计comm列非NULL的行数。
查询emp表中月薪大于2500的人数:
SELECT COUNT(*) FROM emp
WHERE sal > 2500;
统计月薪与佣金之和大于2500元的人数:
SELECT COUNT(*) AS cnt FROM emp WHERE sal+IFNULL(comm,0) > 2500;
查询有佣金的人数,以及有领导的人数:
SELECT COUNT(comm), COUNT(mgr) FROM emp;
SUM和AVG
当需要纵向求和时使用sum()函数。
查询所有雇员月薪和:
SELECT SUM(sal) FROM emp;
查询所有雇员月薪和,以及所有雇员佣金和:
SELECT SUM(sal), SUM(comm) FROM emp;
查询所有雇员月薪+佣金和:
SELECT SUM(sal+IFNULL(comm,0)) FROM emp;
统计所有员工平均工资:
SELECT SUM(sal), COUNT(sal) FROM emp;
或者
SELECT AVG(sal) FROM emp;
MAX和MIN
查询最高工资和最低工资
select MAX(sal),min(sal)from emp;
分组查询
分组查询
查询每个部门的部门编号和每个部门的工资和:
SELECT deptno, SUM(sal)
FROM emp
GROUP BY deptno;
having子句
查询工资总和大于9000的部门编号以及工资和
注意,WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。
LIMIT
limit用来限定查询结果的起始行,以及总行数
查询5行记录,起始行从0开始
SELECT * FROM emp LIMIT 0, 5;
主键
创建表:定义列时指定主键:
CREATE TABLE stu(
sid CHAR(6) PRIMARY KEY,
sname VARCHAR(20),
age INT,
gender VARCHAR(10)
创建表:定义列之后独立指定主键:
CREATE TABLE stu(
sid CHAR(6),
sname VARCHAR(20),
age INT,
gender VARCHAR(10),
PRIMARY KEY(sid)
);
修改表时指定主键:
ALTER TABLE stu
ADD PRIMARY KEY(sid);
删除主键(只是删除主键约束,而不会删除主键列):
ALTER TABLE stu DROP PRIMARY KEY;
主键自增长
创建表时设置主键自增长(主键必须是整型才可以自增长):
CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20),
age INT,
gender VARCHAR(10)
);
修改表时设置主键自增长:
ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;
非空
指定非空约束:
CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(10) NOT NULL,
age INT,
gender VARCHAR(10)
);
在指定了sname不能为空时,当不给sname设置值时,会报错
唯一
CREATE TABLE tab_ab(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(10) UNIQUE
);
insert into sname (sid,sname) values(1001,'zs');
insert into sname (sid,sname) values(1001,'zs');
两次插入的相同的名字时,就会报错
外键
创建从表时指定外键
CREATE TABLE t_section(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(30),
u_id INT,
CONSTRAINT fk_t_user FOREIGN KEY(u_id) REFERENCES t_user(uid)
);
修改从表时指定外键
ALTER TABLE t_section
ADD CONSTRAINT fk_t_user
FOREIGN KEY(u_id)
REFERENCES t_user(uid);
删除外键
ALTER TABLE t_section
DROP FOREIGN KEY fk_t_user;
本文作者:
黄广志
本文链接: https://github.com/ggzhi/ggzhi.github.io/2019/11/10/mysql%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://github.com/ggzhi/ggzhi.github.io/2019/11/10/mysql%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
![知识共享许可协议](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)