Mysql - 每天进步一点点By小白

查询SELECT

1、基础查询

1.1、模糊查询:like

#查询出某字段下包含‘庆农’字样的记录#

select * from 表名 where 字段名 like '%庆农%';

1.2、具体查询

1.2.1、指定范围查询

1、使用关键词 IN,配合where条件查询:

select * from 表名where 字段名 [not] in(select d from b);

select * from 表名where 字段名 in('重庆农商行','大庆银行');

2、使用关键字 or:

select *  from 表名 where 字段名='重庆农商行'or 字段名= '大庆银行';

1.2.2、限制查询数据范围

1、使用关键字between ,包括边界值

select *  from 表名 where 字段名 between 数值1 and 数值2;

2、不包括边界值,not between

select a,b,c  from 表名 where a not between 数值1 and 数值2;

1.3、关联查询

1.3.1、JOIN 关键字

SQL JOIN用于根据两个或多个表中的列之间的关系,从这些表里查询数据

select * from table1 JOIN table2 ON table1.字段名=table2.字段名 AND XXXXX WHERE 条件

1、在表中存在至少一个匹配时,INNER JOIN 关键字返回行。

2、只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。

3、LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

4、RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

实例1:

SELECT column_name(s)

FROM table_name1

INNER JOIN table_name2

ON table_name1.column_name=table_name2.column_name

实例2:

SELECT column_name(s)

FROM table_name1

LEFT JOIN table_name2

ON table_name1.column_name=table_name2.column_name

实例3:

SELECT * FROM A LEFT JOIN B ON A.ID=B.ID WHERE B.OTHERKEY=XXXX

SELECT * FROM A LEFT JOIN B ON A.ID=B.ID AND B.OTHERKEY=XXXX

1.3.2、多表关联查询

 四表联查(表a b c d)

select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where …

1.4、排序

将查询结果按字段的值进行排序,配合order by使用。

desc为倒序关键字,order by默认采用升序(asc),如果存在 where 子句,那么 order by 必须放到where 语句后面。

实例1、按照 job 和薪水倒序排序

select ename,job,ename from emp order by job desc,sal desc;

实例2、按部门升序,薪酬降序

SELECT * FROM emp ORDER BY deptno, sal DESC;

2、高级查询

2.1 函数运算

配合聚合函数来使用

COUNT():统计记录的数目

SUM():求字段的和

AVG():求字段的平均值

MAX():求字段的最大值

MIN():求字段的最小值

实例:

SELECT MAX(sal),MIN(age),AVG(sal),SUM(sal) from emp;

SELECT * FROM emp where sal=(SELECT MAX(sal) from emp));

SELEC COUNT(*) FROM emp;

2.2、分组

2.2.1、基本的语法

GROUP BY 属性名 [HAVING 条件表达式]

[ORDER BY 排序]

属性名:是指按照该字段的值进行分组。

HAVING 条件表达式:用来限制分组后的显示,符合条件表达式的结果将被显示

实例:

select 列名1,count(*) from 表名 group by 列名1;(意思是根据列1进行分组,显示列1和统计数据)

Mysql - 每天进步一点点By小白_第1张图片

2.2.2、having条件筛选

对分组查询结果进行进一步筛选

Mysql - 每天进步一点点By小白_第2张图片

2.2.3、order by排序

作用:对查询结果进行排序操作

语法:order by 列名1,列名2…

使用场合:一般用在查询结果的排序

Mysql - 每天进步一点点By小白_第3张图片

2.3、子查询(嵌入到其他sql语句中的select语句,也叫嵌套查询)

2.3.1、单行子查询

SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM emp where ename='SMITH');查询表中与smith同部门的人员名字。因为返回结果只有一行,所以用“=”连接子查询语句

2.3.2、多行子查询

SELECT ename,job,sal,deptno from emp WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno=10);查询表中与部门号为10的工作相同的员工的姓名、工作、薪水、部门号。因为返回结果有多行,所以用“IN”连接子查询语句。

in与exists的区别: exists() 后面的子查询被称做相关子查询,它是不返回列表的值的。只是返回一个ture或false的结果,其运行方式是先运行主查询一次,再去子查询里查询与其对 应的结果。如果是ture则输出,反之则不输出。再根据主查询中的每一行去子查询里去查询。in()后面的子查询,是返回结果集的,换句话说执行次序和 exists()不一样。子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去。符合要求的输出,反之则不输出。

2.3.3、使用ALL

SELECT ename,sal,deptno FROM emp WHERE sal> ALL (SELECT sal FROM emp WHERE deptno=30);

SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MAX(sal) FROM emp WHERE deptno=30);

查询工资比部门号为30号的所有员工工资都高的员工的姓名、薪水和部门号。以上两个语句在功能上是一样的,但执行效率上,函数会高 得多

3、删除

3.1、drop

drop主要用于删除结构

例如,

删除数据库:drop database XX

删除表: drop table XX

删除表字段:alter table 表名 drop 字段名

(改变了表结构要先alter方法)

实例:alter table student drop age

3.2、delete

delete主要用于删除数据

实例1、要删除 student表上名字为‘张三’的所有信息:

delete from student where name=‘张三’。这种情况下用delete,由此可见delete常用于删除数据

实例2、两张关键表,删除主表中不存在副表中的信息

delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

4、修改

4.1、UPDATE

update命令主要对表数据进行修改

语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

4.1.1、更新某一行中某列

实例:

UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'

4.1.2、更新某一行中若干列

实例:

UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'

WHERE LastName = 'Wilson'

4.2、增加ALTER

alter命令主要是对表结构进行修改,主要包括新增、修改、删除。

4.2.1、新增字段(列)

ALTER TABLE 【表名】 ADD 【字段名】 【字段属性】;

1、增加一个列:Alter table tabname add column col type

注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

4.2.2、修改

1、修改表名

ALTER TABLE 【表名】 RENAME 【新表名】

例: ALTER TABLE test RENAME test1;

2、修改字段名

ALTER TABLE 【表名】 CHANGE 【字段名】 【新字段名】 INTEGER

例: ALTER TABLE test CHANGE name name1 INTEGER;

3、修改字段属性

ALTER TABLE 【表名】 CHANGE 【字段名】 【字段名】【字段属性】

注:只修改字段属性时,两个字段名相同

或 ALTER TABLE 【表名】 MODIFY 【字段名】 【字段属性】

例:

ALTER TABLE test CHANGE name name varchar(30);

或 ALTER TABLE test MODIFY name varchar(30);

4.2.3、删除

1、删除字段

ALTER TABLE 【表名】DROP COLUMN 【列名】

例:

ALTER TABLE test DROP COLUMN sex;

2、删除约束

ALTER TABLE 【表名】 DROP 【约束】

例1:

ALTER TABLE test DROP PRIMARY KEY;删除主键约束

5、新增

5.1、创建CREATE

1、创建数据库

CREATE DATABASE 数据库名;

2、创建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],…)

3、根据已有的表创建新表:

A:create table tab_new like tab_old (使用旧表创建新表)

B:create table tab_new as select col1,col2… from tab_old definition only

5.2、插入INSERT

1、插入多条数据直接在后边加上逗号,直接写入插入的数据即可;主键id是自增的列,可以不用写。

实例:

INSERT INTO tb_name(id,name,score)VALUES(NULL,'张三',140),(NULL,'张四',178),(NULL,'张五',134);

2、插入检索出来的数据

INSERT INTO tb_name(name,score) SELECT name,score FROM tb_name2;

6、条件控制符

 =、>、<、<>、IN(1,2,3......)、BETWEEN a AND b、NOT、AND 、OR、IS[NOT] NULL 空值检测、

Like()用法中,%为匹配任意字符(可以是汉字);

_ 通配符,取第一个字符之后是"eorge" 实例:SELECT * FROM Persons

WHERE FirstName LIKE '_eorge'

持续补充……

你可能感兴趣的:(Mysql - 每天进步一点点By小白)