玩转MySQL (3)---DML

1.CREATE TABLE stud(

sno VARCHAR(18) NOT NULL PRIMARY KEY,

sname VARCHAR(15) NOT NULL,

age INT,

saddress VARCHAR(30)

);

2.ALTER TABLE stud ADD COLUMN sex CHAR;

ALTER TABLE stud DROP COLUMN sex;

3.我们以后开发时,字段名都用英文,如果显示内容时要让表头变成中文,

用别名(AS可以省略)

SELECT * FROM stud;

SELECT sno,sname,age,saddress  FROM stud;


 

SELECT sno AS 编号,sname AS 姓名,age,saddress  FROM stud;

SELECT sno 编号,sname 姓名,age 年龄,saddress 地址 FROM stud; //省略AS

4.SELECT的复杂查询: WHERE子句, BETWEEN子句, IN子句

SELECT * FROM stud WHERE age>20;

SELECT * FROM stud WHERE age>20 AND age<25;


 

SELECT * FROM stud WHERE age BETWEEN 20 AND 24;  //[20,24]BETWEEN-AND中的值是范围


 

SELECT * FROM stud WHERE age=18 OR age=25;


 

SELECT * FROM stud WHERE age IN(18,22,25,28);  //IN 中的值是离散的


 

SELECT * FROM stud WHERE age NOT IN(18,22,25,28); //非NOT


5.模糊查询LIKE  '%'通配所有字符   '_'通配单字符

SELECT * FROM stud WHERE sname LIKE '张%'; //姓张的学生

SELECT * FROM stud WHERE sname LIKE '张_'; //姓张,名为单字的学生


 

SELECT * FROM stud WHERE sname LIKE '张__'; //姓张,名为双字的学生


 

SELECT * FROM stud WHERE sname LIKE '%张%'; //姓名中含“张”字的学生


 

SELECT * FROM stud WHERE sname LIKE '%张%' AND age<24;

6.INSERT INTO stud(sno,sname,saddress) VALUES('1008','赵敏','新疆');

INSERT INTO stud(sno,sname,saddress) VALUES('1009','张无忌','昆明');

INSERT INTO stud(sno,sname,saddress) VALUES('1010','张三丰','五台山');

7.判断值为NULL的字段,不能用"=",而应用IS

//查出所有年龄为空的学生,并把他们的年龄设为18

UPDATE stud SET age=18 WHERE age=NULL; //bug版

UPDATE stud SET age=18 WHERE age IS NULL;

8.注意字符串为空和该字段没有设置值是不同的,判断方式不一样

INSERT INTO stud(sno,sname,age) VALUES('1011','鹰王',40);

SELECT * FROM stud WHERE saddress IS NULL; //未设置值

SELECT * FROM stud WHERE saddress=''; //空串

 

9.注意SQL中的"+"没有字符串连接功能

UPDATE stud SET saddress='湖南益阳' WHERE saddress='益阳';

UPDATE stud SET saddress='湖南'+saddress WHERE saddress='益阳'; //有bug,设置结果为0

 

10.注意,通配符只能在LIKE中使用

DELETE FROM stud WHERE sname='李四_'; //无法删除名为“李四a”的学生

11.句型:

select 字段名 from 表名  where 条件1 and 条件2  or 条件3

update 表名  set 字段名1=值 [,字段名2=值] where 子句[in 子句] [between子句]

delete from 表名  where 子句

create table 表名(
  字段名 类型 primary key,
  字段名 类型 unique
)

12.create view 视图名 as select 子句

视图  视图是虚拟表,该表在物理上不存在的,创建之后,我们写代码时可以当作跟表一样(如果进行数据修改删除,那么它是会

及时更新到物理表中)

CREATE VIEW oldersView AS SELECT * FROM stud WHERE age>=20;

SELECT * FROM oldersView;

SELECT sname,age,saddress FROM oldersView WHERE saddress='益阳';

UPDATE oldersview SET age =age+1;

DELETE FROM oldersview  WHERE saddress='新疆';

视图的生命周期,创建之后会一直存在,要我们手动删除才消失。虽然物理上不是独立的,但它是由一段代码执行生成的,这

段代码一直存在,除非删除视图。

DROP VIEW 视图名; //删除视图

13.聚合函数

SELECT COUNT(*) FROM stud; //输出行数,一般要用别名

SELECT COUNT(*) AS rows FROM stud;

SELECT COUNT(1) AS ROWS FROM stud;//功能同上,据说效率更高

SELECT COUNT(saddress) AS sumNum FROM stud; //统计该字段值非NULL的数量


 

SELECT AVG(age) AS averageAge FROM stud;

SELECT AVG(age) AS averageAge FROM stud WHERE age<20;

SELECT SUM(age) AS sumAge FROM stud WHERE age<20;

SELECT COUNT(1) AS num FROM stud WHERE age<20;

SELECT MAX(age) AS maxAge FROM stud;


 

SELECT MIN(age) AS minAge FROM stud;

 

把各种年龄段的值输出---注意,DISTINCT不要放在最后。
SELECT DISTINCT age FROM stud;

选择年龄最小的那些学生的名字和年龄
SELECT sname,age FROM stud WHERE age=18; //写死了

SELECT sname,age FROM stud WHERE age=(SELECT MIN(age) FROM stud); //写活了


 

选择年龄最小和最大那些学生的名字和年龄

SELECT sname,age FROM stud WHERE age=17 or age=42;

SELECT sname,age FROM stud WHERE age=(SELECT MIN(age) FROM stud)

or age=(SELECT MAX(age) FROM stud);

SELECT sname,age FROM stud WHERE age IN ( SELECT MIN(age),MAX(age) FROM stud ); //WA!!!!!!

SELECT sname,age FROM stud WHERE age IN ( (SELECT MIN(age) FROM stud) ,(SELECT MAX(age) FROM stud) );

14.排序ORDER BY  order by

SELECT * FROM stud ORDER BY age; //默认升序

SELECT * FROM stud ORDER BY age ASC;//升序

SELECT * FROM stud ORDER BY age DESC;//降序

15.exists()

由括号中的子查询返回结果集决定该方法的调用结果,如果子查询结果集为空则函数返回false,否则返回true

SELECT * FROM stud WHERE EXISTS( SELECT * FROM stud WHERE saddress IS NOT NULL);

//只要子查询结果非空则所有信息都输出,否则一条不输出

select * from stud where saddress is NULL;


16.group by

按saddress分组,把各组的年龄总和查询出来

SELECT saddress, sum(age) AS 年龄总和 FROM stud GROUP BY saddress;

按saddress分组,把各组的平均年龄输出

SELECT saddress, AVG(age) AS 平均年龄 FROM stud GROUP BY saddress;

按saddress分组,把平均年龄大于22的那些地方和平均年龄输出

SELECT saddress, AVG(age) AS 平均年龄 FROM stud GROUP BY saddress HAVING AVG(age)>=22 ;


 

句型(固定搭配):

order by子句要放在最后, distinct 放前面

1. select [distinct] ... from ... where ... order by ...  

注意,group by子句中的条件要用having(不能用where)

2. select ... from ... group by ... having ....

字符串处理函数

1.SELECT * FROM stud WHERE saddress='aaa';

2.SELECT * FROM stud WHERE TRIM(saddress)='aaa';//去掉空格

3.SELECT * FROM stud WHERE LEFT(saddress,2)='湖南';//取左边两个字符

4.SELECT REVERSE(sname)AS 反名 FROM stud;//反转

5.SELECT UPPER(sname)AS 大写 FROM stud;//大写

6.SELECT CONCAT(sname,sno,saddress)AS 拼接串 FROM stud;//拼接

7.SELECT INSTR(sname,'a')AS 子串位置, sname FROM stud;//取位置

猜你喜欢

转载自blog.csdn.net/lx678111/article/details/82701103