이 문서 출처 : GitHub의이 · 여기를 클릭 || GitEE이 · 여기를 클릭하십시오
첫째, 쿼리를 조인
그림 표시
1, 테이블 문 건설
부서 및 직원 테이블 :
CREATE TABLE `tb_dept` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`deptName` varchar(30) DEFAULT NULL COMMENT '部门名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
CREATE TABLE `tb_emp` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`empName` varchar(20) DEFAULT NULL COMMENT '员工名称',
`deptId` int(11) DEFAULT '0' COMMENT '部门ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
2 ~ 7 쿼리 가입
- 도 1 : 왼쪽 외부 커넥터
select t1.*,t2.empName,t2.deptId
from tb_dept t1 LEFT JOIN tb_emp t2 on t1.id=t2.deptId;
- 도 2 : 오른쪽 외부 커넥터
select t1.*,t2.empName,t2.deptId
from tb_dept t1 RIGHT JOIN tb_emp t2 on t1.id=t2.deptId;
- 도 3 : 커넥터 내의
select t1.*,t2.empName,t2.deptId
from tb_dept t1 inner join tb_emp t2 on t1.id=t2.deptId;
- 그림 4 : 왼쪽 커넥터
테이블 독특한 장소 tb_dept를 조회합니다.
select t1.*,t2.empName,t2.deptId
from tb_dept t1 LEFT JOIN tb_emp t2 on t1.id=t2.deptId
WHERE t2.deptId IS NULL;
- 그림 5 : 바로 연결
쿼리는 테이블 독특한 장소를 tb_emp.
select t1.*,t2.empName,t2.deptId
from tb_dept t1 RIGHT JOIN tb_emp t2 on t1.id=t2.deptId
WHERE t1.id IS NULL;
- 그림 6 : 완전히 연결
select t1.*,t2.empName,t2.deptId
from tb_dept t1 LEFT JOIN tb_emp t2 on t1.id=t2.deptId
UNION
select t1.*,t2.empName,t2.deptId
from tb_dept t1 RIGHT JOIN tb_emp t2 on t1.id=t2.deptId
- 그림 7 : 전체 연결되지
쿼리 두 테이블 관련이없는 데이터입니다.
select t1.*,t2.empName,t2.deptId
from tb_dept t1 RIGHT JOIN tb_emp t2 on t1.id=t2.deptId
WHERE t1.id IS NULL
UNION
select t1.*,t2.empName,t2.deptId
from tb_dept t1 LEFT JOIN tb_emp t2 on t1.id=t2.deptId
WHERE t2.deptId IS NULL
둘째, 날짜 및 시간 조회
1, 테이블 문 건설
CREATE TABLE `ms_consume` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_id` int(11) NOT NULL COMMENT '用户ID',
`user_name` varchar(20) NOT NULL COMMENT '用户名',
`consume_money` decimal(20,2) DEFAULT '0.00' COMMENT '消费金额',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='消费表';
2, 통계 날짜 케이스
- 날짜 범위의 첫 번째 데이터
장면 : 활동 시간, 선행 지출 얼마나 많은, 얼마나 많은 양보 : 제품 일상 업무 활동, 종종이 규칙을 보았다.
SELECT * FROM
(
SELECT * FROM ms_consume
WHERE
create_time
BETWEEN '2019-12-10 00:00:00' AND '2019-12-18 23:59:59'
ORDER BY create_time
) t1
GROUP BY t1.user_id ;
- 날짜 사이의 시간 차이
장면 : 카운트 다운 일반적인 장면
SELECT t1.*,
timestampdiff(SECOND,NOW(),t1.create_time) second_diff
FROM ms_consume t1 WHERE t1.id='9' ;
- 오늘날의 데이터 쿼리
-- 方式一
SELECT * FROM ms_consume
WHERE DATE_FORMAT(NOW(),'%Y-%m-%d')=DATE_FORMAT(create_time,'%Y-%m-%d');
-- 方式二
SELECT * FROM ms_consume
WHERE TO_DAYS(now())=TO_DAYS(create_time) ;
- 시간 통계
장면 : 통계 거의 7 일, 소비자가 사용자를 두 번 횟수보다 더 크다.
SELECT user_id,user_name,COUNT(user_id) userIdSum
FROM ms_consume WHERE create_time>date_sub(NOW(), interval '7' DAY)
GROUP BY user_id HAVING userIdSum>1;
- 평균 날짜 범위
장면 : 평균 소비 지정된 날짜 범위 및 분류.
SELECT * FROM
(
SELECT user_id,user_name,
AVG(consume_money) avg_money
FROM ms_consume t
WHERE t.create_time BETWEEN '2019-12-10 00:00:00'
AND '2019-12-18 23:59:59'
GROUP BY user_id
) t1
ORDER BY t1.avg_money DESC;
셋째, 나무 테이블 쿼리
1, 테이블 문 건설
CREATE TABLE ms_city_sort (
`id` INT (11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`city_name` VARCHAR (50) NOT NULL DEFAULT '' COMMENT '城市名称',
`city_code` VARCHAR (50) NOT NULL DEFAULT '' COMMENT '城市编码',
`parent_id` INT (11) NOT NULL DEFAULT '0' COMMENT '父级ID',
`state` INT (11) NOT NULL DEFAULT '1' COMMENT '状态:1启用,2停用',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (id)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '城市分类管理';
2, 직접 SQL 쿼리
SELECT t1.*, t2.parentName
FROM ms_city_sort t1
LEFT JOIN (
SELECT
m1.id,m2.city_name parentName
FROM
ms_city_sort m1,ms_city_sort m2
WHERE m1.parent_id = m2.id
AND m1.parent_id > 0
) t2 ON t1.id = t2.id;
3 기능 질의
- 쿼리 부모의 이름
DROP FUNCTION IF EXISTS get_city_parent_name;
CREATE FUNCTION `get_city_parent_name`(pid INT)
RETURNS varchar(50) CHARSET utf8
begin
declare parentName VARCHAR(50) DEFAULT NULL;
SELECT city_name FROM ms_city_sort WHERE id=pid into parentName;
return parentName;
end
SELECT t1.*,get_city_parent_name(t1.parent_id) parentName FROM ms_city_sort t1 ;
- 쿼리 루트 아이
DROP FUNCTION IF EXISTS get_root_child;
CREATE FUNCTION `get_root_child`(rootId INT)
RETURNS VARCHAR(1000) CHARSET utf8
BEGIN
DECLARE resultIds VARCHAR(500);
DECLARE nodeId VARCHAR(500);
SET resultIds = '%';
SET nodeId = cast(rootId as CHAR);
WHILE nodeId IS NOT NULL DO
SET resultIds = concat(resultIds,',',nodeId);
SELECT group_concat(id) INTO nodeId
FROM ms_city_sort WHERE FIND_IN_SET(parent_id,nodeId)>0;
END WHILE;
RETURN resultIds;
END ;
SELECT * FROM ms_city_sort WHERE FIND_IN_SET(id,get_root_child(5)) ORDER BY id ;
넷째, 소스 주소
GitHub·地址
https://github.com/cicadasmile/mysql-data-base
GitEE·地址
https://gitee.com/cicadasmile/mysql-data-base