LOADING

加载过慢请开启缓存 浏览器默认开启

Mysql2

2023/9/30 MySQL Mysql

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:

  1. 将选修“离散数学”的学生成绩提高5%。

       UPDATE SC   
       SET Grade=Grade*1.05 
       WHERE Cno IN    
           (SELECT Cno     
              FROM Course    
              WHERE Cname= '离散数学');
    
  2. 将姓名是“李华”的同学的年龄改为20,所在系改为“计算机”。

     UPDATE Student      
     SET Sage= 20,Sdept= '计算机'    
     WHERE Sname= '李华';
    
  3. 将所有学生的成绩增加10分。

     UPDATE SC SET Grade=Grade+10;
    

决MySQL中中文报错

在实践MySQL语句中遇到了一个问题:

用char(n)数据类型的时候,中文字符输入乱码,无法显示。
查询解决方案,改变编码格式。
采用命令: 
    set name gbk;

bug

solve