DDL--数据库操作语言
登录数据库
mysql -uroot -p 密码
退出数据库
exit;
创建数据库
create database 数据库名 default character set utf8;
删除数据库
drop database 数据库名;
查询数据库
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cgb2106 |
| mysql |
| performance_schema |
| spring |
| spring1 |
| springdata |
| springdb |
| sys |
| web |
| zxy |
+--------------------+
使用指定的数据库
use 数据库名;
创建表
create table 表名(字段1,字段2.....)
删除表
drop table user2;
修改表
alter table user2 add column 字段名 字段类型 长度
查看数据库中的表
show tables;
+-------------------+
| Tables_in_cgb2106 |
+-------------------+
| user2 |
+-------------------+
查看表结构
desc 表名;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| sex | varchar(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| address | varchar(10) | YES | | NULL | |
| email | varchar(20) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
插入数据
insert into 表名 values(字段1的值,字段2的值,字段3的值.....)
查询表所有记录
select *from 表名;
查询指定字段的记录
select name from user2;
解决中文乱码
set names gbk;
修改表的记录
update 表名 set 字段名=新值
修改指定的字段的记录
update 表名 set 字段名=新值 where id=?;
删除表记录
delete from user2;
删除指定表的记录
delete from user2 where id=3;
字段约束:
#主键约束
--给表里的某个字段设计约束
特点是字段值必须唯一且不能为null
create table a(id int primary key)
主键自增策略:主键的值交给数据库维护管理
create table b(id int primary key auto_increment)
#非空约束
--如果给一个列添加了非空约束,字段的值不能是null
create table c(
id int primary key auto_increment,
password varchar(20) not null
)
#唯一约束:值不能相同
create table d(
id int primary key auto_increment,
name varchar(20) unique
)
基础函数:
#upper全转大写 lower全转小写
select ename ,upper(ename),lower(ename) from emp
#length:求长度(一个字母算一个字符,一个汉字算三个字符)
select LENGTH(ename),ename,length(job),job from emp
#concat(1,2,3):拼接字符串--1是字段名,2,3都是要拼的内容
select ename,concat(ename,"hello",100) from emp
#substr(1,2,3):截取字符串--1是字段名,2是开始的位置,3是截取的总长度
select dname,substr(dname,1,3) from dept
#replace(1,2,3):替换字符串--1是字段名,2是要被替换的字符,3是新的数据
select dname,replace(dname,"o","666") from dept
#ifnull:判断是否为空,如果是null,就替换成0-1
select *,ifnull(comm,0)+sal from emp
#round--四舍五入ceil--向上取整floor--向下取整
select comm,round(comm),CEIL(comm),FLOOR(comm) from emp
#now/curdate/curtime
select now()--年月日时分秒
select curdate()--年月日
select curtime()--时分秒
#year&month&day&hour&minute&second
select YEAR(NOW())
select year("2021-07-25")
select year(now()),month(now()),day(now()),hour(now()),minute(now()),second(now())
条件查询
#distinct
--使用distinct关键字,去除重复的记录
select loc from dept;
select distinct loc from dept;
#where
--满足条件的才查出来
#查询部门编号为1的记录
select *from dept where deptno=1
#查询地址在一区的部门记录
select *from dept where loc="一区"
#查询地址在一区的部门名称
select dname from dept where loc="二区"
#根据部门的名称查询部门的记录
select *from dept where dname="research"
#根据名称和地址查询部门的记录
select *from dept where dname="research" and loc="二区"
select *from dept where dname="research" or loc="二区"
#查询工资大于8000的员工的信息
select *from emp where sal>8000
#查询工资为8000或者工资为3000的员工的信息
select *from emp where sal=8000 or sal=3000
select *from emp where sal in(8000,3000)
#查询部门编号为100,300,500的员工的信息
select *from emp where empno in(100,300,500)
#like
--通配符%代表0-n个字符
#查询名字里包含a的员工的信息
select *from emp where ename like "%a%"
#null
#查询mgr是null的员工的信息
select *from emp where mgr is null
select *from emp where mgr is not null
#between and
#查询sal在3000-10000之间的员工的信息
select *from emp where sal between 3000 and 10000
#查询2015-2017年之间入职的员工的信息
select *from emp where year(hiredate) between 2015 and 2017
#limit
select *from emp limit 3
select *from emp limit 1,3
--第一个数字是开始位置(从n+1条数据开始),第二个数据是查询多少条
#order by
#根据员工的工资进行升序排列
select *from emp order by sal --默认为升序
#根据员工的工资进行降序排列
select *from emp order by sal desc--降序
#根据入职的年份进行升序排列
select *from emp order by year(hiredate)
#根据入职的年份进行降序排列
select *from emp order by year(hiredate) desc
#统计案例
#统计2019年入职的员工
select *from emp where year(hiredate)=2019
#统计2017年以前入职的员工
select *from emp where year(hiredate)<2017
#统计2015-2017年入职的员工
select *from emp where year(hiredate) between 2015 and 2017
#统计员工入职了几年
select *,year(now())-year(hiredate)from emp