select 字段1,字段2(名字)… from 表名(只可以一个)
起别名两种方法 ① select 字段名 as 别名 from 表;
② …(空格) 别名 from 表;
只是改变显示的固有名字,实际表不会更改
SELECT name
,id,age AS “年纪” FROM second
; 只改变age不改变其它
“+” 只能用来计算 数值 不可起到连接作用
null +null == null
“呼呼”+100====0+100 不可转换成数值的字符默认为0
select concat(字段,",",“字段”,) as “balabla” from 表; 用来合并两列数据并指定合并后的名字
select distinct 字段名 from …; 去重的关键字
展示表的结构;
DESC second
;
SHOW COLUMNS FROM second
;
判断某字段是否为空并说明代替字:
IFNULL(salary,‘空’) 返回一个字段结果
SELECT name
, IFNULL(salary,‘空’) AS “工资” FROM second
;
比较运算符 : = (不等于)<> 其它类似Java
逻辑运算符 and or not(语句)
SELECT * FROM second
WHERE salary <> 4000;
模糊查询:
通配符: % 代表任意多个字符 任意单个字符 / 转义字符
like/not like 字符查询 where like ‘%a%’
in/not in where 字段 in (条件1,条件2,)
not…/between 小值 and 大值 不可颠倒
is null/is not null 判断是否为空 不可等于 =(只能被用来判断数值)
排序查询:
from
where
select
order_by
SELECT * FROM second
WHERE age>2 ORDER BY salary DESC; 降序 默认升序(ASC)
ORDER BY salary DESC,…,…,; 可以一直追加排序条件
常见函数:
concat(, , )
SELECT CHAR_LENGTH(“黑黑”); 字符长度 2
SELECT LENGTH(‘黑黑’); 字节 6 utf-8
SELECT SUBSTR(‘hello’,1,3); 起始索引,字节长度(默认到字符尾)
SELECT INSTR(‘hellofameheloo’,‘lo’); 4 第一次出现索引的位置
SELECT TRIM('x’FROM ‘xxxxbutxxyouxxx’)AS butyou; 去除前后指定的 字母 默认去空格
SELECT RPAD(‘hhah’,10,2);
SELECT LEFT(‘hhah’,2); 从左截取
SELECT RIGHT(‘hhah’,2);
SELECT ABS(X) 绝对值
CEIL() 向上取整 向下 FLOOR(X)
ROUND(1.21,2) 四舍五入,保留位数
SELECT TRUNCATE(1.02,1); 1.0 保留小数点后几位
mod(10,3) 取余
分组函数
MAX( )
MIN(expr)
AVG([DISTINCT] expr)
COUNT(DISTINCT expr,[expr…]) 统计字段非空行数
count (*) 统计结果集的个数
SUM([DISTINCT] expr)
分组查询
SELECT AVG(salary) 平均工资,manager_id 部门号 FROM employees WHERE commission_pct IS NOT NULL GROUP BY 部门号;
分组前筛选 where
分组后 having 与 分组函数 搭配 结合执行顺序
内连接: 有连接关系的
等值连接:
两不同表因为相同的字段而建立连接
SELECT last_name,department_name FROM departments d join employees c on
d.department_id=c.department_id
where …;
非等值连接
…
… join …on salary between … and …
where
自连接:
将一张表当成两张表使用
SELECT e.last_name,e.manager_id,d.employee_id,d.last_name
FROM employees e (inner )join employees d 虚拟建立两张表: 员工表,经理表
on e.manager_id=d.employee_id
where …;
写的顺序:select … from… where… group by… having… order by…
执行顺序:from… where…group by… having… select … order by…
外连接:
主表中的某字段无法与从表中的字段匹配的情景下使用
结果=内+外特有结果
左外连接 left join 设置主表在join的哪边 主表:输出的主要部分的来源 同理右外连接
子查询 相当于给定一个满足所给条件的单个数据或一列or一行
标量子查询,列子查询,行子查询 使用不同之处:关键在于操作符对象所对应的基本单位
单行 多行操作符
联合查询:
union join 1.自动去重 (union all 取消自动属性) 2.前后两个select显示的字段类型和顺序最好一致(但查询的字段总数必须相同)
表的修改,删除
修改
单表:
UPDATE departments d 表名 类似于from,用来指定操作的表 !!! 修改后需要更新,不然有时不会显示修改后的值
SET d.manager_id=200
WHERE manager_id IS NULL;
多表:
UPDATE departments d inner/right/left jion loacation l on …
SET d.manager_id=200
WHERE manager_id IS NULL;
删除:
单表删除:
DELETE FROM departments d WHERE department_id=270;
多表删除:
DELETE FROM departments d INNER JOIN locations l ON … WHERE department_id=270;
库的建立和删除
CREATE DATABASE checksom;
ALTER DATABASE checksom CHARACTER SET gbk;
DROP DATABASE IF EXISTS checksom;
表的建立和管理
建立:
creat table if not exists bala…(
名字 类型,
名字 类型,
…
名字 类型
);
修改:
改变字段名 ALTER TABLE books CHANGE COLUMN publishmentdate pubdate TIMESTAMP;
修改字符类型 ALTER TABLE books MODIFY COLUMN pubdate datetime;
添加字段 ALTER TABLE books ADD COLUMN annual INT ;
删除字段 ALTER TABLE books drop COLUMN annual;
修改表名 ALTER TABLE books RENAME TO book;
删除:
DROP TABLE copy;
复制表
CREATE TABLE copy like books; 只复制结构
DROP TABLE if EXISTS copy;
INSERT INTO books(bname,author_id,id,price) 复习插入数据
VALUES(‘hello’,100,001,34.0),
(‘neihao’,101,002,35.8); 多行数据只需一个values用 , 隔开
//既复制结构又复制数据
CREATE TABLE copy SELECT *(可替换为需要复制数据的部分字段) FROM books;
复制某些字段但不需要字段下的数据:
…
where 0;