SELECT 查询列表
FROM 表名
WHERE 条件表达式;
SELECT
*
FROM
employees
WHERE
salary > 12000;
SELECT
last_name,
department_id
FROM
employees
WHERE
department_id != 90;
SELECT
last_name AS ‘员工名‘,
salary AS ‘工资‘,
commission_pct AS ‘奖金‘
FROM
employees
WHERE
salary >= 10000
AND salary <= 20000;
SELECT
*
FROM
employees
WHERE
( department_id < 90 OR department_id > 110 )
OR ( salary > 15000 );
SELECT
*
FROM
employees
WHERE
NOT ( department_id >= 90 AND department_id <= 110 )
OR ( salary > 15000 );
SELECT
*
FROM
employees
WHERE
last_name LIKE ‘%a%‘;
SELECT
*
FROM
employees
WHERE
last_name like ‘_\_%‘
SELECT
last_name AS ‘员工名‘,
salary AS ‘工资‘,
commission_pct AS ‘奖金‘
FROM
employees
WHERE
salary BETWEEN 10000
AND 20000;
SELECT
*
FROM
employees
WHERE
job_id IN ( ‘IT_PROG‘, ‘AD_VP‘ );
SELECT
*
FROM
employees
WHERE
commission_pct IS NULL;
SELECT 查询列表
FROM 表名
WHERE 条件表达式
ORDER BY 排序列表(字段 [asc],字段 [desc],……);
SELECT
*
FROM
employees
ORDER BY
salary DESC;
SELECT
*
FROM
employees
WHERE
department_id >= 90
ORDER BY
hiredate ASC;
SELECT
*,
salary * 12 * ( IFNULL( commission_pct, 0 ) + 1 ) AS ‘年薪‘
FROM
employees
ORDER BY
年薪 ASC;
SELECT
*
FROM
employees
ORDER BY
salary,
employee_id;
作用:获取参数值的字节个数。
示例:
SELECT LENGTH( ‘john‘ );
SELECT
LENGTH( ‘张三丰hahaha‘ ); -- 15
作用:拼接字符串。
示例:
SELECT
CONCAT( last_name, ‘_‘, first_name ) AS ‘姓名‘
FROM
employees;
SELECT
UPPER(last_name)
FROM
employees;
SELECT
LOWER( last_name )
FROM
employees;
-- 截取从指定索引处后面所有字符
SELECT
SUBSTR( ‘李莫愁爱上了陆展元‘, 7 );
-- 截取从指定索引处指定字符长度的字符
SELECT
SUBSTR( ‘李莫愁爱上了陆展元‘, 1,3 );
作用:用于返回子串在大串中的第一次出现的索引,如果找不到返回0。
示例:
SELECT
INSTR( ‘杨不悔爱上了殷六侠‘, ‘殷六侠‘ );
SELECT
trim( ‘ 杨不悔爱上了殷六侠 ‘ );
SELECT
REPLACE ( ‘杨不悔爱上了殷六侠‘, ‘爱上了‘, ‘怎么可能爱上‘ );
作用:用指定的字符实现左填充指定长度。
示例:
SELECT
LPAD( ‘杨不悔爱上了殷六侠‘, 20, ‘*‘ );
作用:用指定的字符实现右填充指定长度。
示例:
SELECT
RPAD( ‘杨不悔爱上了殷六侠‘, 20, ‘*‘ );
SELECT
ROUND(1.65)
SELECT
ROUND(1.45)
SELECT
ROUND(1.567,2)
作用:向上取整。
示例:
SELECT
CEIL(1.11)
SELECT
FLOOR(1.567)
SELECT
TRUNCATE(1.567,2)
SELECT
MOD(3,1)
select NOW();
select CURDATE()
select CURTIME();
SELECT YEAR(NOW());
SELECT MONTH(NOW());
SELECT DAY(NOW());
SELECT HOUR(NOW());
SELECT MINUTE(NOW());
SELECT SECOND(NOW());
SELECT STR_TO_DATE(‘9-13-1999‘,‘%m-%d-%y‘);
SELECT DATE_FORMAT(NOW(),‘%Y年-%m月-%d日‘);
作用:显示当前数据库的版本。
示例:
SELECT version();
SELECT DATABASE ();
SELECT USER();
SELECT IF(10 > 5,‘大‘,‘小‘);
作用:类似于java中的switch-case语句或if-else语句。
语法:
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
……
else 要显示的值n或语句n;
end;
case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
……
else 要显示的值n或语句n
end;
示例:
SELECT
*,
CASE
commission_pct
WHEN NULL THEN ‘没有奖金‘
ELSE ‘有奖金‘
END
FROM
employees;
SELECT
avg( salary ), -- 平均值
count(*), -- 总数
MAX( salary ), -- 最大值
MIN( salary ), -- 最小值
sum( salary ) -- 求和
FROM
employees;
SELECT 分组函数,列[要求出现在group by后面]
FROM 表名
WHERE 条件表达式
group by 分组表达式
having 分组条件表达式
ORDER BY 排序列表(字段 [asc],字段 [desc],……);
SELECT
avg( salary ) ,department_id
FROM
employees
GROUP BY
department_id;
SELECT
max( salary ),
job_id
FROM
employees
GROUP BY
job_id;
SELECT
count(*),
location_id
FROM
departments
GROUP BY
location_id;
SELECT
AVG( salary ),
department_id
FROM
employees
WHERE
email LIKE ‘%a%‘
GROUP BY
department_id;
SELECT
max(salary),manager_id
from employees
where commission_pct is not null
GROUP BY manager_id;
SELECT
department_id,
count(*) AS `count`
FROM
employees
GROUP BY
department_id
HAVING
`count` > 2
SELECT
job_id,
max( salary ) AS `max`
FROM
employees
WHERE
commission_pct IS NOT NULL
GROUP BY
job_id
HAVING
`max` > 12000;
SELECT
count(*) ,LENGTH( last_name )
FROM
employees
GROUP BY
LENGTH( last_name )
HAVING
count(*) > 5;
SELECT
AVG( salary ),
department_id,
job_id
FROM
employees
GROUP BY
department_id,
job_id;
DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(10) NOT NULL,
`password` varchar(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
insert into `admin`(`id`,`username`,`password`) values (1,‘john‘,‘8888‘),(2,‘lyt‘,‘6666‘);
DROP TABLE IF EXISTS `beauty`;
CREATE TABLE `beauty` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`sex` char(1) DEFAULT ‘女‘,
`borndate` datetime DEFAULT ‘1987-01-01 00:00:00‘,
`phone` varchar(11) NOT NULL,
`photo` blob,
`boyfriend_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
insert into `beauty`(`id`,`name`,`sex`,`borndate`,`phone`,`photo`,`boyfriend_id`) values (1,‘柳岩‘,‘女‘,‘1988-02-03 00:00:00‘,‘18209876577‘,NULL,8),(2,‘苍老师‘,‘女‘,‘1987-12-30 00:00:00‘,‘18219876577‘,NULL,9),(3,‘Angelababy‘,‘女‘,‘1989-02-03 00:00:00‘,‘18209876567‘,NULL,3),(4,‘热巴‘,‘女‘,‘1993-02-03 00:00:00‘,‘18209876579‘,NULL,2),(5,‘周冬雨‘,‘女‘,‘1992-02-03 00:00:00‘,‘18209179577‘,NULL,9),(6,‘周芷若‘,‘女‘,‘1988-02-03 00:00:00‘,‘18209876577‘,NULL,1),(7,‘岳灵珊‘,‘女‘,‘1987-12-30 00:00:00‘,‘18219876577‘,NULL,9),(8,‘小昭‘,‘女‘,‘1989-02-03 00:00:00‘,‘18209876567‘,NULL,1),(9,‘双儿‘,‘女‘,‘1993-02-03 00:00:00‘,‘18209876579‘,NULL,9),(10,‘王语嫣‘,‘女‘,‘1992-02-03 00:00:00‘,‘18209179577‘,NULL,4),(11,‘夏雪‘,‘女‘,‘1993-02-03 00:00:00‘,‘18209876579‘,NULL,9),(12,‘赵敏‘,‘女‘,‘1992-02-03 00:00:00‘,‘18209179577‘,NULL,1);
DROP TABLE IF EXISTS `boys`;
CREATE TABLE `boys` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`boyName` varchar(20) DEFAULT NULL,
`userCP` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
insert into `boys`(`id`,`boyName`,`userCP`) values (1,‘张无忌‘,100),(2,‘鹿晗‘,800),(3,‘黄晓明‘,50),(4,‘段誉‘,300);
笛卡尔积产生的条件:
为了避免笛卡尔积,可以在WHERE加入有效的连接条件。
示例:笛卡尔积:
SELECT
`name`,
boyName
FROM
beauty,
boys;
SELECT
`name`,
boyName
FROM
beauty,
boys
WHERE
beauty.boyfriend_id = boys.id;
SELECT
last_name,
department_name
FROM
employees,
departments
WHERE
employees.department_id = departments.department_id;
SELECT
e.last_name,
d.department_name
FROM
employees e,
departments d
WHERE
e.department_id = d.department_id
AND e.commission_pct IS NOT NULL;
CREATE TABLE job_grades ( grade_level VARCHAR ( 3 ), lowest_sal INT, highest_sal INT );
INSERT INTO job_grades
VALUES
( ‘A‘, 1000, 2999 );
INSERT INTO job_grades
VALUES
( ‘B‘, 3000, 5999 );
INSERT INTO job_grades
VALUES
( ‘C‘, 6000, 9999 );
INSERT INTO job_grades
VALUES
( ‘D‘, 10000, 14999 );
INSERT INTO job_grades
VALUES
( ‘E‘, 15000, 24999 );
INSERT INTO job_grades
VALUES
( ‘F‘, 25000, 40000 );
SELECT
e.salary,
jg.grade_level
FROM
employees e,
job_grades jg
WHERE
e.salary BETWEEN jg.lowest_sal
AND jg.highest_sal;
SELECT
e.last_name as last_name ,
m.last_name as manager_name
FROM
employees as e,
employees as m
WHERE
e.manager_id = m.employee_id;
SELECT 查询列表
FROM 表1 别名 [连接类型 inner|left|right] join 表2 别名
ON 连接条件
WHERE 筛选条件
group by 分组字段
having 分组筛选条件
order by 排序列表;
SELECT
`name`,
boyName
FROM
beauty
INNER JOIN boys
ON beauty.boyfriend_id = boys.id;
SELECT
e.salary,
jg.grade_level
FROM
employees e
INNER JOIN job_grades jg ON e.salary BETWEEN jg.lowest_sal
AND jg.highest_sal;
SELECT
e.last_name AS last_name,
m.last_name AS manager_name
FROM
employees AS e
INNER JOIN employees AS m ON e.manager_id = m.employee_id;
SELECT
beauty.`name`,
boys.boyName
FROM
beauty
LEFT JOIN boys ON beauty.boyfriend_id = boys.id
WHERE
boys.boyName IS NULL;
SELECT
beauty.`name`,
boys.boyName
FROM
beauty
CROSS JOIN boys;
原文:https://www.cnblogs.com/xuweiweiwoaini/p/13660425.html