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,locFROM 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等都会被这个条件查询到。

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

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

  1. MYSQL基础(sql语句)

    SQL语句 文章目录 SQL语句 SQL语句的多种类型: 1.DDL操作 1.1 数据库DDL操作 1.2 表DDL操作 1.3 用户DDL操作 1.4 查看命令SHOW 1.5 ALTER修改操作 ...

  2. MySQL基础----动态SQL语句

    动态sql语句基本语法  1 :普通SQL语句可以用Exec执行 eg:   Select * from tableName           Exec('select * from tableNa ...

  3. MYSQL数据库初窥门径, SQL语句地熟练使用, 图形化界面提高效率

    目录 一. 前文简介 二. MYSQL简介 2.1 什么是数据库 2.2数据库地特点以及作用 三.MYSQL基础操作(SQL语句) 3.1连接数据库 3.2数据库的语法特点,以及数据库必会操作 数据操 ...

  4. JavaWEB01:MySQL基础——数据库相关概念、MySQL安装和配置、基础的SQL语句

    JavaWEB01:MySQL基础--数据库相关概念.MySQL安装和配置.基本的SQL语句 JavaWEB02:MySQL高级--约束.数据库设计.多表查询.事务 JavaWEB03:JDBC Ja ...

  5. MySQL数据库:SQL语句

    MySql数据库系列阅读 MySQL数据库 MySQL数据库:SQL语句 MySQL数据库:完整性约束 MySQL数据库备份与还原 MySQL数据库:编码 1. SQL概述 1.1 什么是SQL SQ ...

  6. 1.MySQL数据库 2.SQL语句

    01数据库概念 * A: 什么是数据库数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. * B: 什么是数据库 ...

  7. mysql 执行顺序 SQL语句执行顺序分析

    最近在做一个数据库的大作业,算是复习了下MySql里面比较复杂的一些语句的用法,如Left Join之类的.在这里就不对具体语法进行记录了,希望能在以后经常用到,而不是隔好长时间用一次.在这里就记录下 ...

  8. MySQL数据库的SQL语句

    MySQL数据库的SQL语句 MySQL的常用数据类型 MySQL数据类型及含义 char与varchar的区别 MySQL的基本命令 登录数据库 查看MySQL数据库版本 查看当前服务器中的数据库 ...

  9. MySQL 简介及SQL 语句

    MySQL 简介及SQL 语句 一.数据库概述 1.数据库的分类 1)区别 2.MySQL 概述 3.MySQL 存储原理 二.部署 MySQL 数据库 1.安装 MySQL 数据库 2.优化调整 M ...

最新文章

  1. System.Threading.Timer 定时器的用法
  2. poj 2395 prime的递归实现
  3. 新建cordova应用,插件开发教程系列(总目录)
  4. java能不能不用jvm_Java、JVM和操作系统之间的关系,写给新人,
  5. php可输入的下拉框,JavaScript_可编辑下拉框的2种实现方式,可编辑下拉框-HTML 复制代码 代 - phpStudy...
  6. 第一个Eureka Service
  7. 2020湖南省技能竞赛获奖名单_高光时刻!肇庆市中等职业学校学生专业技能竞赛获奖名单公布~...
  8. c# 如何获取项目的根目录
  9. 关于websql语法
  10. MFC中CImageList的用法
  11. 红外测距模块 51单片机_基于51单片机的红外发射和接收程序。
  12. dev c++怎么设置断点_怎么在FTP中使用代理(FLASHFXP代理设置教程)
  13. linux nfs acl 特定ip,Linux NFS配置
  14. 每天半小时,一周带你手速大幅提升——几大打字练习网站测评
  15. English马力-Lesson1(MY MYSELF,IRENE)
  16. Beyond Compare文件比对
  17. 太赫兹芯片是什么原理_一种太赫兹芯片的制作方法
  18. 正则表达式——URL验证
  19. 马斯克解释星际飞船原型测试失败:操作失误是主因
  20. 简述UIDatePicker的用法

热门文章

  1. Matlab 画图 去白框
  2. mac 下载frame.php,Dragonframe Mac版-Dragonframe for mac下载 V3.6.6-PC6苹果网
  3. PS教程!教你五分钟快速绘制大气磅…
  4. 使命召唤9怎么样使用计算机,Win7电脑运行玩使命召唤9出现黑屏如何解决
  5. android 大作业
  6. 铁路现代化技术系统整理(一)之TDCS
  7. CF-ViT论文粗读
  8. python米和厘米转换代码_python3 短网址和数字的相互转换的代码
  9. 共享本人收藏的php编程软件
  10. 安川服务器维修手册,安川驱动器维修常见报警代码及维修方法