DQL数据查询语言下之-----多表查询-----常见函数-----子查询-----分页查询以及DML数据管理语言
一.多表查询
1.笛卡尔集
2.等值连接
4.join连接
#案例:查询员工名、部门名和所在的城市
SELECT e.last_name,d.department_name,l.city
from
t_mysql_employees e,t_mysql_departments d,t_mysql_locations l
where e.department_id = d.department_id
and d.location_id = l.location_id
select * from t_mysql_boys b,t_mysql_beauty bt
where b.id = bt.boyfriend_id;
二.常见函数
select releaseDate from t_p1_blog;
select DATE_FORMAT(releaseDate,'%Y年%m月') from t_p1_blog;
select DATE_FORMAT(releaseDate,'%Y年%m月') releasestr,count(*) from t_p1_blog GROUP BY releasestr;
常见函数:
一、单行函数
字符函数:
length:获取字节个数(utf-8一个汉字代表3个字节,gbk为2个字节)
concat
substr
instr
trim
upper
lower
lpad
rpad
replace
数学函数:
round
ceil
floor
truncate
mod
日期函数:
now
curdate
curtime
year
month
monthname
day
hour
minute
second
str_to_date
date_format
其他函数:
version
database
user
控制函数
if
case
三.子查询
其实就是在sql语句中嵌套sql语句
步骤:
逻辑分析充分需求,分段书写SQL子句
最后拼接sql子句完成需求
SELECT
*
FROM
t_mysql_employees
WHERE
salary > ( SELECT salary FROM t_mysql_employees WHERE last_name = 'Abel' );
SELECT last_name,job_id,salary
FROM t_mysql_employees
WHERE job_id = (
SELECT job_id
FROM t_mysql_employees
WHERE employee_id = 141
) AND salary>(
SELECT salary
FROM t_mysql_employees
WHERE employee_id = 143
);
四.分页查询
应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
语法:
select 查询列表
from 表
【join type join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段】
limit 【offset,】size;
offset要显示条目的起始索引(起始索引从0开始)
size 要显示的条目个数
特点:
①limit语句放在查询语句的最后
②公式
要显示的页数 page,每页的条目数size
select 查询列表
from 表
limit (page-1)*size,size;
size=10
page
1 0
2 10
3 20
五.DML数据管理语言
//字符和日期型数据应包含在单引号中。
//向表中添加 department_id为900,department_name为Ptions,location_id为1700.
INSERT INTO t_mysql_departments(department_id, department_name, location_id)
VALUES (900, 'Ptions', 1700);
第1行“department_name”列的数据太长
右键点击设计表,找到 _name 改成30,再点击保存.
再运行,结果是这样
查看表,看添加成功没有,有红色的那行就是添加成功了.
//创建一张新的表table t_mysql_departments_bak 但是因为where后面的结果为false,
所以只复制表结构,表里的内容是不会被复制的.
create table t_mysql_departments_bak
as
select * from t_mysql_departments where 1=2;
插入数据
使用 INSERT 语句向表中插入数据。
使用这种语法一次只能向表中插入一条数据。
INSERT INTO table [(column [, column…])]
VALUES (value [, value…]);
向指定表出入所有列段值
insert into 表名 values(…);
//向表t_mysql_departments_bak插入t_mysql_departments表中所有内容
insert into t_mysql_departments_bak
select * from t_mysql_departments
//向表t_mysql_departments 插入department_id,department_name
且department_id < 120
insert into t_mysql_departments_bak(department_id,department_name)
select department_id,department_name from t_mysql_departments
where department_id < 120;
向表的特定列段插入值
insert into 表名(列段1,列段2…)
valuses(列1对应的值,列2对应的值)
把department_id = 901的改成department_id=902,department_name = 'Ptions_xxx'
UPDATE t_mysql_departments set department_id=902,department_name = 'Ptions_xxx' where department_id = 901
修改数据
update 表名 set 列段1=列段值1,列段2=列段2… where 筛选条件
// 查看t_mysql_employees表
SELECT * from t_mysql_employees;
//所有的工资加500
UPDATE t_mysql_employees set salary = salary+500;
//修改 表 t_mysql_boys bo表中 bo的id与b的id相等使两张表连接
修改张无忌的cp对象的phone属性为119 userCP属性为1000,
UPDATE t_mysql_boys bo
INNER JOIN t_mysql_beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`phone`='119',bo.`userCP`=1000
WHERE bo.`boyName`='张无忌';
删除数据
delete from 表名 where 条件