MYSQL基础之SQL语句概念,规范,以及了解SELECT

SQL 的简介

1974年,IBM研究员发布了一篇揭开了数据库技术的论文《SEQUEL:一门机构化的英语查询语言》,直到新增这个查询语言也没有太大的变化。可以看出SQL语言的生命力之强。

无论是前端工程师,还是后端算法工程师,都需要和数据打交道,都需要快速精确的得到自己想要的数据,更不要说数据分析师了,他们的工作就是和数据打交道,所以可以看出数据库的对很多工程师来说是必备的一个技能。

SQL是使用关系模型的数据据应用语言,于数据直接打交道的,由于IMB上世纪70年底开发出来,之后又美国国家标准局(ANSI)开始着手制定了SQL标准,先后有SQL-86,SQL-89,SQL-92,SQL-99等标准,不过其中最重要的是SQL-92和SQL-99,分别代表92年和99年颁布的SQL标准。而我们今天还是遵守这些标准。

但是遵守这些标准,但是各自的数据库又有自己差异的一些用法,简单说就是大体相同,但是具体又有不同。比如mysql的sql和oracle的sql虽然格式很像,但又不是完全相同。

SQL分类

SQL语言在功能上主要分三大类:

  • DDL (Data Definition Languages 数据定义语言)

    这些语句定义不同的数据库,表,视图和索引等数据库对象,还可以用来创建,删除,修改数据库和数据表的结构。这些语句主要包含关键字:CREATE, DROP ALTER

  • DCL (Data Control Language 数据控制语言)

    这些语句是用于定义数据库,表,字段,用户访问权限和安全级别的。其包含的关键字:GRANGT REVOKE COMMIT ROLLBACK

  • DML (Data Manipulation Language 数据操作语言)

    这些语句用于添加,删除,更新和查询的数据库记录,检查数据完整性。其包含的关机字:INSERT DELETE UPDATE SELECT等。

    而这是msyql基础聊的重点,也是从事编程必备的一个基础,毕竟数据库交互才是数据库存在的目的,当然DDL和DCL不是不重要,而是其是mysql数据库的表结构构建等高阶操作了,如果有需要我们再聊,毕竟现在主要聊基础,也就是用来操作数据。

当然三种分类,也不是唯一的标准,而是一个相对广泛的分类,比如还有很多人,因为查询语句很重要单独从DML中分离出一种DQL(数据查询语言),以及TCL( 事务控制语言)包含COMMIT,ROLLBACK.

SQL 规则和规范

基本规则

  • SQL可以写在一行或者多行,不过为了提高可读性,各子句分行写,必要时使用缩进。
  • 每条命令以;\G或者\g,不过一般的时候都是使用;
  • 而关键字比如(INSERT 等)是不能分行的。
  • 关于标点符号
    • 必须宝成所有的(),单引号,双引号都是成对出现的。
    • 必须使用英文状态下的半角输入方式
    • 字符串和日期时间类型的数据需要使用单引号表示。
    • 列的别名,尽量使用双引号包裹,而且不建议省略as

基本规范

规范不是规则,是一种建议,算是对规则的一种补充,可以遵守也可以不遵守。不过个人建议还是遵守,毕竟其也是一种让SQL语句变得更加整洁和明了。

  • 首先说明一下MYSQL 在window和linux下对大小写是敏感是不一样的。

    MYSQL 在windows上大小写是不敏感的,简单的说就是不会区分大小写,比如A和a代表字面意思是一样的。

    MYSQL 在linux上大小写是敏感的,其是区分大小写的,但又不是全部都敏感:

    • 数据库名,表名,表的别名,以及变量名都是严格区分大小写的。
    • 关键字,函数名,字段名,和字段别名都是忽略大小写的。
  • 因此有了同意的书写规范:

    • 数据库名,表名,表的别名,字段名,字段别名等都用小写。
    • SQL关键字,函数名,变量等都写大写。

注释

什么语言都有注释,不然有时候阅读语言的时候会很懵逼

单行注释: #注释文字  这个是MYSQL特有的一种方式

单行注释: -- 注释  这个请注意--后又空格
多行注释:/* 注释文字 */

命令规则

  • 数据库,表名不得超过30个字符,变量名限制为29个
  • 必须只能包含A-Z,a-z,0-9,_共63个字符。
  • 数据库名,表名,字段名等对象中间不能包含空格
  • 同一个mysql软件中,数据库不能同名,同一个数据库中表不能重名,同一个表中的字段不能重名。
  • 自己创建的字段,不要和保留字,数据中系统或常用的方法名冲突,如果坚持使用,请在SQL语句中使用(`)引起来。这个不是单引号而是着重号,其实在键盘tap键上面的那个按键。
  • 保持字段名和类型的一致性,就是关联两个表的时候,有相同的数据方便之间关联,那么其字段名和字段格式最好保持一直。

SQL 命令初体验

既然体验那么,自然需要一些数据,所以从搜索一个数据表。然后放入数据库中。

mysql 登录

对于数据库安装,网上资料很多,所以就不在聊。简单说一下登录,可以通过dos命令进来登录。

mysql -uroot -ppassword

在这里插入图片描述

但是为了安全,一般是输入:

mysql -uroot -p
然后在输入密码,这样密码就显示为****

在这里插入图片描述

或者是开始所有软件mysql

在这里插入图片描述

在这里插入图片描述

但是一般不会通过dos登录,而是通过一些第三放工具,而小猪用的是自己常用的一个管理工具SQLyog因为数据库是8.0版本,所以需要高级版本的SQLyog,如果自己找不到而有需要可以留言给我。

在这里插入图片描述

导入数据库

  • dos命令导入

    mysql -uroot -p
    ****(密码)
    source sql文件路径如下:
    

在这里插入图片描述

  • 查看导入的数据库
show databases;

在这里插入图片描述

这个数据库test,就是新导入的数据库。

然后看表的信息:

show tables;

在这里插入图片描述

然后看各个表的创建信息

SHOW CREATE TABLE 表名

在这里插入图片描述

后面的注释,说实话显示为乱码,这个后面再聊如何解决。

然后可以再看某个表的数据

在这里插入图片描述

不过我们更习惯用第三方工具导入数据,以及查看数据信息。

  • SQLyoy 导入数据

    这个图形可视化,所以很简单的操作。

    左侧空白处右键。

在这里插入图片描述

在这里插入图片描述

然后刷新一下,左侧就出现了test这个数据库。

而且直接用鼠标即可操作这个问题了。

在这里插入图片描述

甚至可以看表的里面的数据。

在这里插入图片描述

SELECT 体验

下一篇打算开始聊mysql数据库中的函数,所以本章我们需要先了解一下SELECT语句。

格式 SELECT …FORM …
SELECT  字段, 字段, ......
FROM 表名;

这个时候需要说一个特殊的表dual,这个表本身没用什么数据,但是其可以作为一个测试表来使用,后面聊一些逻辑算法,以及函数的时候,会用到这个表,这个表被称之为伪表

比如:

SELECT 1+1 
FROM dual;

在这里插入图片描述

  • *

    这个再数据库中的作用,就算所有的属性,如下;

    SELECT * 
    FROM  dept;
    -- 和
    SELECT deptno,dname,loc
     FROM dept;
    

在这里插入图片描述

在这里插入图片描述

可见两者的效果一样,但是一般搜索一个表的时候,测试的时候方便会用到*,但是在开发的时候哪怕麻烦也是写字段,第一可以修改返回属性顺序,第二就是数据搜索会更快,也就是性能更优。

别名(使用as)

还是老规矩,先说概念,然后看代码。

别名简单说就是重写命名,为什么要这样做,毕竟有些列是经过计算的,有些列命太长但会多次使用,当然表名也是可以有别名的。

所以可以看别名的作用:见面知其意,可以更方便的使用。

格式:

列名或者表名或运算的列   as  “别名”
-- 当然 as也是可以省略的
列名或者表名或运算的列   “别名”
SELECT deptno AS "dno",dname "dn",1+1 AS "sum"
 FROM dept;

这个例子就是为了演示,所以本身的别名可能无法体现我所说的优点。

在这里插入图片描述

其实别名不带双引号其实也行如下:

--  如果后面跟的是英语自然可以不带双引号也可以
SELECT 1+1 su
FROM  dual;

--  但是别名直接如果有空格就需要了
SELECT 1+1 "s  u"
FROM  dual;
去重关键字 (DISTINCT)

这个是去重的一个关键字,具体体现如下:

SELECT deptno
FROM emp;

在这里插入图片描述

然后使用DISTINCT:

SELECT DISTINCT deptno
FROM emp;

在这里插入图片描述

可以看出去重了部门号,这个又有一个新问题,如果是多个字段呢?

SELECT ename,DISTINCT deptno
FROM emp;
-- 这样写不行,运行会报错

在这里插入图片描述

那如果反过来呢?

SELECT DISTINCT deptno,ename
FROM emp;
-- 不报错,但似乎又没用什么意义

在这里插入图片描述

因为数据库中员工名不会重复,而这个为了满足一一对应的关系,DISTINCT如果生效的话,那表的对应的两列就不一样多了。所以一般的时候单独一列的时候才会使用DISTINCT,如果多列就无法去重了吗?可以,但是会用到GROUP BY 这个后面聊。

空值(null)

在数据库中空值其长度虽然是0,不等于空字符串,和'' , 0 ,'null'是不一样的.而且在MYSQL中,空值是占用空间的。所有的运算符或者列值遇见null值,运算的结果都为null。

如下体现

SELECT sal,sal*2,comm,comm*2
FROM emp;

在这里插入图片描述

着重符

这个前面说过了,因为某些字段会和MYSQL中的关键字一样,但是又想告诉MYSQL这个只是一个字段不是关键字。

如下:

SELECT sal,sal*2 SUM ,comm,comm*2 `sum`
FROM emp;

在这里插入图片描述

可见这样在SQLyog中一些关键字就不会变成大写了。也就是不会呈现关键字的提示了。

查询常量

常数就是数据没有的字段,但是直接进行赋值的数据,但是这个数据会直接匹配后面字段的数据数量,都会显示同一个值。如下:

SELECT 999,"小猪弟",sal
FROM emp;

在这里插入图片描述

显示表结构

这个用到了关键字DESCRIBE,这个关键字又可以简写DESC

可以显示表中字段的详细信息。

如下:

DESC emp;
--- 或者
DESCRIBE emp;

在这里插入图片描述

WHERE

如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。

演示如下:

SELECT * 
FROM emp
WHERE deptno='20';
-- 这个单引号如果上面这个例子不带也可以但是最好带上,毕竟如果是汉字或者又空格的时候不带单引号就会报错。

在这里插入图片描述

SELECT * 
FROM emp
WHERE ename='smith';

在这里插入图片描述

这个可以看出MSYQL对大小写不敏感。比如条件ename='smith'但是得到的数据员工数据可以是大写的SMITH,也就是说无论是SMIThSmIth等都会被这个条件查询到。

现在了解一写后,下篇就要聊运算符等用法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值