MySql数据库

MySql数据库

名称解释

|名称|简述|
|-:-|:–|
|关系|一个关系通常说的是一张表|
|元组|表中的一行即为一个元组。|
|属性|表中的一列即为一个属性;每个属性都有一个名称,称为属性名。|
|候选码|表中的每个属性组,它可以唯一确定一个元组。|
|主码|一个关系又多个候选码,选定其中一个为主码|
|域|属性的取值范围|
|分量|元组中的一个属性值|

SQL语句

基础语句:

  • select - 从数据库中提取数据
  • update - 更新数据库中的数据
  • delete - 从数据库中删除数据
  • insert into - 向数据库中插入新数据
  • create table - 创建新表
  • alert table - 修改数据库表
  • drop table - 删除表
  • create index - 创建索引
  • drop index - 删除索引

常用语句:

show databases 显示所有数据库 。
use database_name 进入某个数据库 , databases_name 为某个数据库名。
select * from table_name 查询某个表的所有数据 ,table_name 为表名。
create database database_name 创建数据库,其中database_name 为数据库名称
desc table_name 查看一个表的结构
show create table table_name 查看创建表的SQL语句
exit 退出数据库 (仅仅断开了客户端和服务器的连接)

查询语句

条件语句

  • OR: 或者
  • AND: 并且
  • NOT:不符合该条件
  • =:判断相等
  • >:判断大于
  • >=:判断大于或者等于
  • <:判断小于
  • <=:判断小于或者等于
  • <>:判断不相等
  • LIKE:判断相似

练习:

  1. where 关键字后面的 score >= 80 是条件。
    select * from students where score >= 80;
  2. 条件表达式用<条件1> AND <条件2>表达满足条件1并且满足条件2.符合条件“分数在80分或以上”,并且还符合条件“男生” , 就可以写:
    select * from students where score >= 80 AND gender = 'M';
  3. 条件表达式用<条件1> OR <条件2>表达满足条件1或者满足条件2。分数在80分或以上”或者“男生” , 可以写:
    select * from students where score >= 80 OR gender = 'M';
  4. 不是2班的学生
    select * from students where NOT class_id = 2;
    也可以写成:
    select * from students where class_id <> 2;
  5. 查询分数在60分(含)~90分(含)之间的学生
    select * from students where score >= 60 AND score <= 90;
    select * from students where score between 60 and 90;

投影查询

SELECT 列1, 列2, 列3 FROM ...,让结果集仅包含指定列。这种操作称为投影查询。
还可以给每一个列名起别名,它的语法是:SELECT 列1 别名1, 列2 别名2, 列3 别名3 FROM...
练习:

  1. 从students表中返回id、score和name这三列
    select id,score,name from students;
  2. SELECT语句将列名score重命名为points,而id和name列名保持不变
    select id,score points,name from students;

排序

关键字:ORDER BY
默认是正序:ASC
如果有WHERE子句,那么ORDER BY子句要放到WHERE子句后面。
练习:

  1. 按照成绩从低到高进行排序。正序 ASC
    select id,score,name from students order by score;
  2. 按照成绩从高到低进行排序。倒序 DESC
    select id,score,name from students order by score desc;
  3. 先按score列倒序,如果有相同分数的,再按gender列排序
    select id ,score ,name,gender from students order by score desc , gender;
  4. 查询一班的学生成绩,并按照倒序排序
    select * from students where class_id = 1 order by score desc;

聚合查询

|函数|说明|
|-:-|-:-|
|COUNT|统计数量|
|SUM|计算某一列的合计值,该列必须为数值类型|
|AVG|计算某一列的平均值,该列必须为数值类型|
|MAX|计算某一列的最大值|
|MIN|计算某一列的最小值|

注意:如果聚合查询的where条件没有匹配到任何行,COUNT()会返回0,
而SUM()、AVG()、MAX()、MIN()会返回NULL;

练习:

  1. 查询students表中的一共有多少记录
    select COUNT(*) from students;
    可以给列名起个别名
    select COUNT(*) num from students;
  2. 统计有多少男生
    select COUNT(*) boys from students where gender = 'M';
  3. 统计男生的平均成绩
    select AVG(score) from students where gender = 'M';

分组聚合
练习:

  1. 统计各班级人数
    select class_id,COUNT(*) num from students group by class_id;
  2. 统计各班的男生和女生人数
    select class_id,gender,COUNT(*) num from students group by class_id,gender;
  3. 用一条SELECT查询查出每个班级的平均分
    select class_id,AVG(score) from students group by class_id;
  4. 用一条SELECT查询查出每个班级的平均分 保留两位小数
    select class_id,round(AVG(score),2) from students group by class_id;
  5. 查出每个班级男生和女生的平均分
    select class_id,gender,round(avg(score),2) from students group by class_id,gender;

连接查询

内连接:

  1. 先确定主表,仍然使用from <表1>的语法;
  2. 再确定需要连接的表,使用inner join <表2>的语法;
  3. 然后确定连接条件,使用ON <条件...>,这里的条件是students.class_id = classes.id,表示students表的class_id列与classes表的id列相同的行需要连接;
  4. 可选:加上where子句,order by 等子句。

练习:

  1. 把每位学生对应的班级名称列出来.
    1
    2
    3
    4
    select s.id,s.name,s.class_id,c.name class_name,s.gender,s.score 
    from students s
    inner join classes c
    ON s.class_id = c.id;

插入语句

语法: INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...);
也可以一次性添加多条记录,只需在VALUES子句中指定多个记录值,每个记录用括号

例如:

1
2
3
INSERT INTO students (class_id, name, gender, score) VALUES
(1, '大宝', 'M', 87),
(2, '二宝', 'M', 81);

练习:

  1. 向students表插入一条新记录
    INSERT INTO test_database.students (id, class_id, name, gender, score) VALUES (11, 3, '小丽2', 'M', 85);

更新语句

语法:
UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE ...;

练习:

  1. 更新id为1的学生的姓名和分数两个字段
    update students set name ='大牛',score=66 where id = 1;
  2. 更新id = 5,6,7的记录
    update students set name ='大牛',score=66 where id >=5 AND id <=7;
  3. 把所有80分以下的同学的成绩加10分
    update students set score = score + 10 where score < 80;
    注意:执行这句遇到了 1175 问题,执行 SET SQL_SAFE_UPDATES = 0解决;

注意:UPDATE语句可以没有WHERE条件,假设执行update students SET score=60;,会使整个表所有的记录都被更新。最好先用select语句来测试where条件是否筛选出了期望的记录,然后再用update更新。

删除语句

语法:
DELETE FROM <表名> WHERE ...;

练习:

  1. 删除id=1的记录
    delete from students where id=1;

注意:delete和update类似,不带where条件也可以执行。如果执行delete from students会删除整个表的数据


笔记参考

菜鸟教程
雪峰老师

-------------本文结束感谢您的阅读-------------