学习MySQL的第一天

       日积月累,终有云开见月时

一、基本的SELECT语句

SQL的分类(简写)

{

       DDL:数据定义语言。 CREATE \(创建)  ALTER \(修改)  DROP \(删除结构) RENAME \ (重命     名)  TRUNCATE \ (清空表)

       DML:数据操作语言。 INSERT \ (添加)  DELETE \(删除记录) UPDATE \ (修改)  SELETE \       (查询)  “增删改查”

       DCL:数据控制语言。 COMMIT \ (提交修改)  ROLLBACK \ (返回之前操作)  SAVEPOINT \        GRANT \ REVOKE(权限的问题)

}

1、基本的select语句 :select 字段1,字段2,...    from  表名

从当下数据库建立的表中,查询(展现)字段1,字段2... 的内容

例:在emp数据库下已经建立了一个emp1表,查询其中的 “id” 列

数据库emp结构层次
emp1表

      

       

              

       

       

  

  代码展示及结果呈现 :

# 展示特定的列+
SELECT id
FROM emp1;

# 展示所有的字段
# "*":表中所有字段(或列)
SELECT * FROM emp1;
展示全部字段
展示 id 字段

2、字段(列)的别名

别名类似于外号,仅作用于当下的语句命令中,不修改原表中的数据信息

格式:字段名后空一格                                                                                                               

# 列的别名: name 姓名 :“姓名” 这个就叫做别名
SELECT id,name 姓名
FROM emp1;
无别名时的字段
加入别名 “姓名” 之后的字段展示

 3、去除重复项

表现效果类似于WPS的筛选唯一项功能

例:当你想要查找一群人都来自哪几个院系时

# 没有进行去重

SELECT 学院
FROM emp1;

# 去重之后的

SELECT DISTINCT 学院
FROM emp1;
没有去重
去重之后

 注意(在两个字段的情况下进行演示):

(1)进行筛选的字段在前,且后面接一个未进行筛选的字段,且两者的数量不一致,将导致报错

(2)只有同时两个条件同时重复时,才会进行筛选,否则不发挥作用

例:

# 
SELECT DISTINCT 学院,salary
FROM emp1;
筛选前

 4、 空值问题

空值,也就是我们常说的Null

在我们向表里添加数据时,不可避免的会出现一些未知的数据需要先空出来,这是它们一般被赋值为 ’null‘ ,那么NULL 会不会参与运算呢,我们可以验证一下:

# 奖金一栏有NULL,将 奖金*12 命名为年工资 
SELECT salary,奖金,奖金 * 12 "年工资"
FROM emp1;

通过运行语句,我们可以看到,当奖金被赋值为NULL后,它依然可以参与运算,但是任何数*NULL都等于NULL ,所以Null 不等于0

总结:Null 可以参与运算,任何数与之相乘除或相加减,其值依然为Null,NUll不等于0,不等于""

拓展:如果考虑美观性,我们通常会希望让Null 等于 0,对此,我们可以通过IFNULL(expr1,expr2)来实现,expr1:含有NULL的列;expr2:想要变成的数值

# 将空值转化为0,并参与运算
SELECT salary,奖金,IFNULL(奖金,0)* 12 "年工资"
FROM emp1;

5、 着重号( ` ) 

着重号不是单引号,当你定义的SQL库或者表等与SQL语句中的关键词出现重复时,将会导致无法具体确认,从而出现错误,而着重号可以令其在运行时得到区分,从而避免报错

例:首先建立一个 ORDER 表

# 1、无着重号
SELECT * FROM ORDER;

#2、有着重号
SELECT * FROM `ORDER`;
无着重号会产生错误
加入着重号

 

6、查询常数

查询常数更像是在指定位置插入一列指定的数据,但是不修改原表

例:emp1表中包含 id、name、salary、学院、奖金 五个字段(列),但这些人的学历都是本科,我想要在展示将本科学历加入到第一列,但不想对原表产生影响,那么就可以运行下面的命令

SELECT '本科',id,name,salary,学院,奖金
FROM emp1;

7、显示表结构 

可以用 DESCRIBE 或 DESC 来显示表中字段的详细信息

DESCRIBE emp1; # 显示表中字段的详细信息
DESC student;  # 也可以写为DESC

8、过滤数据

我们在查找数据时,如果要从海量数据里面一条条的进行查找验证其是否符合规则,那就太过复杂了,我们可以通过 WHERE 语句来实现这一目的,WHERE 与C语言中的 if 条件语句很相似

# 查询计科院所有人员信息
SELECT * FROM emp1
# 过滤条件 声明在WHERE后面
WHERE 学院 = '计科院' AND id > 4;
全部数据
过滤后的数据

需要注意的是,如果有多个条件时,中间要用 AND 来进行连接。

        今天是学习MySQL的第一天,将学到的知识整理成笔记,在这上面呈现出来,希望能对大家产生帮助,同时也欢迎大家来一同交流和纠正我的错误。

        计算机的就业形势已然不如当年,或许我们能做的就是不断地学习新的知识,不断地磨练自己的技术,在荆棘中开辟出独属于自己的道路;与其望洋兴叹,不如破釜沉舟。

        须知少日拏云志,曾许人间第一流。我们还年轻,我们还有无限可能!