Mysql常用语句
- 一、数据库操作
- 二、表操作
- 三、数据操作
- 四、属性约束
- 五、SELECT
- 六,基础函数
- 七,聚合函数
- 八,分组
- 九,子查询
- 十,多表联查
- 十一,事务
一、数据库操作
SELECT DATABASE();
SHOW DATABASES;
CREATE DATABASE IF NOT EXISTS db_name charset utf8;
ALTER DATABASE 库名 选项信息
DROP DATABASE[ IF EXISTS] 数据库名
二、表操作
create table table_name(pid INT, name CHAR(20), price INT);
CREATE TABLE table_name(
id int(10) PRIMARY KEY,
name varchar(10) NOT NULL,
sex char(1)
)
DROP TABLE IF EXISTS table_name
TRUNCATE TABLE table_name
ALTER TABLE table_name
SHOW TABLES FROM db_name
CREATE TABLE table_name [AS] SELECT * FROM new_table_name
三、数据操作
INSERT INTO table_name (字段) VALUES(值)
DALETE FROM table_name
UPDATE table_name SET 字段名=新值,字段名=新值
ORDER BY empno DESC
SELECT 字段列表 FROM table_name 加查询条件
四、属性约束
CREATE TABLE tb_user(
id INT AUTO_INCREMENT,
NAME VARCHAR(30) UNIQUE NOT NULL,
age INT,
phone VARCHAR(20) UNIQUE NOT NULL,
email VARCHAR(30) UNIQUE NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE tb_user_address (
user_id INT PRIMARY KEY NOT NULL,
address VARCHAR(200),
FOREIGN KEY(user_id) REFERENCES tb_user(id)
);
CREATE TABLE tb_user (
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
NAME VARCHAR(50) NOT NULL UNIQUE,
sex CHAR(2) DEFAULT '男',
phone CHAR(18),
age INT,
CHECK (age>0 AND age<=200),
createdTime DATE DEFAULT NOW()
);
五、SELECT
select * from table_name
select id,name from table_name
select * from table_name where id=1
select * from table_name where name='倾风'
select * from table_name where id between 1 and 4
select * from table_name where id>1 and id<4
=, <=>, <>, !=, <=, <, >=, >, !, &&, ||,
in (not) null, (not) like, (not) in, (not) between and, is (not), and, or, not, xor
is/is not 加上ture/false/unknown,检验某个值的真假
<=>与<>功能相同,<=>可用于null比较
select * from table_name where id=1 or id=4
select * from table_name where id=1 and id=4
select * from table_name where id in(1,2,3,4)
select * from table_name where id not in(1,2,3,4)
select * from table_name where name like '%倾风%'
select * from table_name where name like '%_风%'
select * distinct name from table_name
select * from table1 where name='倾风'
union
select * from table2 where name='落霞'
SELECT * FROM emp LIMIT 3
SELECT * FROM emp LIMIT 0,3
SELECT * FROM emp LIMIT 1,3
select * from student order by age
select * from student order by age asc
select * from student order by age desc
六,基础函数
select lower(name),upper(name) from table_name
select name,length(name) from table_name
select name, substr(name,1,3) from table_name
select concat(name,'(',lzx,')') from table_name
七,聚合函数
select count(*) from table_name;
select count(1) from table_name;
select max(id) from table_name;
select min(id) from table_name;
select avg(id) from table_name;
select sum(id) from table_name;
八,分组
SELECT deptno,MAX(sal),AVG(sal) FROM emp
GROUP BY deptno
ORDER BY MAX(sal)
SELECT NAME,COUNT(NAME) FROM student
GROUP BY NAME
HAVING COUNT(NAME)>1
九,子查询
- 子查询需用括号包裹。
from后要求是一个表,必须给子查询结果取个别名。
- 简化每个查询内的条件。
- from型需将结果生成一个临时表格,可用以原表的锁定的释放。
select * from (select * from tb where id>0) as subfrom where id>1;
- 子查询返回一个值,标量子查询。
- 不需要给子查询取别名。
- where子查询内的表,不能直接用以更新。
select * from tb where money = (select max(money) from tb);
如果子查询结果返回的是一列。
使用 in 或 not in 完成查询
exists 和 not exists 条件
如果子查询返回数据,则返回1或0。常用于判断条件。
select column1 from t1 where exists (select * from t2);
查询条件是一个行。
select * from t1 where (id, gender) in (select id, gender from t2);
行构造符:(col1, col2, ...) 或 ROW(col1, col2, ...)
行构造符通常用于与对能返回两个或两个以上列的子查询进行比较。
!= all() 相当于 not in
= some() 相当于 in。any 是 some 的别名
!= some() 不等同于 not in,不等于其中某一个。
all, some 可以配合其他运算符一起使用。
十,多表联查
将多个表的字段进行连接,可以指定连接条件。
- 默认就是内连接,可省略inner。
- 只有数据存在时才能发送连接。即连接结果不能出现空行。
on 表示连接条件。其条件表达式与where类似。也可以省略条件(表示条件永远为真)
也可用where表示连接条件。
还有 using, 但需字段名相同。 using(字段名)
SELECT d.dname,e.ename,e.job
FROM
(SELECT deptno,dname FROM dept) d
INNER JOIN
(SELECT deptno,ename,job FROM emp) e
ON d.deptno = e.deptno
WHERE d.deptno=2
即,没有条件的内连接。
select * from tb1 cross join tb2;
- 如果数据不存在,也会出现在连接结果中。
如果数据不存在,左表记录会出现,而右表为null填充
SELECT d.dname,e.ename,e.job
FROM
(SELECT deptno,dname FROM dept) d
LEFT JOIN
(SELECT deptno,ename,job FROM emp) e
ON d.deptno=e.deptno
如果数据不存在,右表记录会出现,而左表为null填充
select
d.dname,e.ename,e.job
from
(select deptno,dname from dept) d
right join
(select deptno,ename,job from emp) e
on d.deptno = e.deptno
自动判断连接条件完成连接。
相当于省略了using,会自动查找相同字段名。
natural join
natural left join
natural right join
select info.id, info.name, info.stu_num, extra_info.hobby, extra_info.sex from info, extra_info where info.stu_num = extra_info.stu_id;
十一,事务
SET @@autocommit = 0;
BEGIN;
INSERT INTO student (id) VALUES(5);
UPDATE student SET NAME='倾风' WHERE id=5;
COMMIT;
SET @@autocommit = 0;
BEGIN;
INSERT INTO student (id) VALUES(5);
UPDATE student SET NAME='倾风' WHERE id=5;
ROLLBACK;
SET @@autocommit = 0;
SAVEPOINT qing;
本文有借鉴https://github.com/Snailclimb/JavaGuide 本人陈诺 如文章有雷同 均为借鉴 如需删除 请联系我 vx:cola951456