Mysql2
选择语句 SELECT
1.获取所有列
SELECT *
2.使用 SELECT FROM
查询
SELECT * ;
FROM customers;
会返回表的所有字段数据
3.WHERE语句可以筛选结果
SELECT * ;
FROM customers;
where customer_id = 1;
4.ODER BY 语句进行排序
SELECT * ;
FROM customers;
--where customer_id = 1;
ORDER BY first_name;
5.查询某一个
SELECT 1,2
注:语句是有顺序的,按照逻辑书写
6.查询的数据位于一个区间
TWEEN ……AND……
SELECT Sno,Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 18 AND 20;
7.确定集合
查询’网络工程系’, ‘计算机系’, ‘信息工程系’的学生的姓名和年龄。
SELECT Sname,Sage FROM Student
WHERE Sdept IN ('网络工程系', '计算机系', '信息工程系');
8.字符匹配
LIKE,NOT LIKE
where <属性列> [ Not ] LIKE <匹配串> [ escape<换码字符>]
查找指定的属性列值与<匹配串>相匹配的元组。匹配串可以是一个完整的字符串,也可以含有通配符 % 和 _ 。
通配符 % (百分号)代表任意长度(长度可以为0)的字符串。 例:a%b 表示以a开头,以b结尾的任意长度的字符串。 如: acb、ab、absorb等都满足该匹配串。
通配符 _ (下划线)代表任意单个字符。 例:a_b 表示以a开头,以b结尾的长度为3的任意字符串。 如: acb、adb等都满足该匹配串。
9.涉及空值的查询
SELECT Sno,Cno FROM SC
WHERE Grade IS NULL;
SELECT Cno,Sno FROM SC
WHERE Grade IS NOT NULL;
10.多重条件查询
用 AND连接
SELECT Sno
FROM Student
WHERE Sdept=‘网络工程系' AND Sage>18;
11.排序操作
ORDER BY子句:对查询结果进行排序
升序:ASC
降序:DESC
SELECT Sno,Sage FROM Student
WHERE Sdept='软件工程'
ORDER BY Sage DESC;
12.聚集函数
计数
COUNT(*)COUNT([DISTINCT|ALL] <列名>)
计算总和
SUM([DISTINCT|ALL] <列名>)
计算平均值
AVG([DISTINCT|ALL] <列名>)
最大最小值
MAX([DISTINCT|ALL] <列名>)
MIN([DISTINCT|ALL] <列名>)
13.分组查询
SELECT Sdept,COUNT( * ) 学生数
FROM Student GROUP BY Sdept;
eg:
查询平均成绩在80分以上的学生的学号和平均成绩。
SELECT Sno,AVG(Grade) 平均成绩
FROM SC GROUP BY Sno
HAVING AVG(Grade)>=80;
14.多表查询
查询每个学生的基本信息及学生选修课的情况。
SELECT Student.*,SC.*
FROM Student,SC
WHERE Student.Sno=SC.Sno ;
15.自然连接查询。
SELECT Student.*,SC.Cno,SC.Grade
FROM Student,SC
WHERE Student.Sno = SC. Sno;
eg:
查询选修了‘001’课程
select Sname,Grade
from Student,SC
where Student.Sno=SC.Sno
and Cno='001'and Grade>75;
查询不同课程成绩相同的学生的学号、课程号和成绩。
SELECT a.Sno,a.Cno,b.Cno,a.Grade
FROM SC a , SC b
WHERE a.Grade=b.Grade AND a.Sno=b.Sno AND a.Cno!=b.Cno
16.外连接
外连接的语法格式为:
<表名> LEFT | RIGHT [OUTER] JOIN <表名>ON<连接条件>
其中:表名为需连接的表,
LEFT [OUTER] JOIN 称为左外连接,RIGHT [OUTER] JOIN称为右外连接。
查询选修了的课程情况及已开设的所有选修课的课程名。
SELECT SC.*,Cname
FROM SC RIGHT JOIN Course ON
SC.Cno=Course.Cno;
17.集合查询
集合操作的种类
- 并操作UNION
- 交操作INTERSECT
差操作EXCEPT其语法格式为:
<SELECT语句> UNION[ALL]|INTERSECT|EXCEPT< SELECT语句>
18.嵌套查询
子查询时不能使用 ODRDER BY子句
eg:查询比所有“计算机”系的学生年龄都大的学生信息。
SELECT * FROM Student
WHERE Sage > ALL
(SELECT Sage
FROM Student
WHERE Sdept= '计算机');
数据的修改
语句的格式:
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件>];
SET子句
- 指定修改方式
- 要修改的列
- 修改后取值
WHERE子句
- 指定要修改的元组
- 缺省表示要修改表中的所有元组
eg:
将选修“离散数学”的学生成绩提高5%。
UPDATE SC SET Grade=Grade*1.05 WHERE Cno IN (SELECT Cno FROM Course WHERE Cname= '离散数学');
将姓名是“李华”的同学的年龄改为20,所在系改为“计算机”。
UPDATE Student SET Sage= 20,Sdept= '计算机' WHERE Sname= '李华';
将所有学生的成绩增加10分。
UPDATE SC SET Grade=Grade+10;
决MySQL中中文报错
在实践MySQL语句中遇到了一个问题:
用char(n)数据类型的时候,中文字符输入乱码,无法显示。
查询解决方案,改变编码格式。
采用命令:
set name gbk;