mysql必知必会系列是本人在读《mysql必知必会》中的笔记,方便自己以后查看。

MySQL、 Oracle以及Microsoft SQL Server等数据库是基于客户机—服务器的数据库。客户机—服务器应用分为两个不同的部分。服务器部分是负责所有数据访问和处理的一个软件。这个软件运行在称为数据库服务器的计算机上。

在处理SQL语句时,其中所有空格都被忽略,sql语句不分大小写。

基本知识

  • 数据库(database) : 保存有组织的数据的容器(通常是一个文件或一组文件)。
  • 表(table): 某种特定类型数据的结构化清单。
  • 模式(schema):关于数据库和表的布局及特性的信息。模式可以用来描述数据库中特定的表以及整个数据库(和其中表的关系)。如可以存储什么样的数据,数据如何分解,各部分信息如何命名等。
  • 列(column):表中的一个字段。所有表都是由一个或多个列组成的。
  • 行(row):表中的一个记录。表中的数据是按行存储的,所保存的每个记录存储在自己的行内。
  • 数据类型(datatype):所容许的数据的类型。
  • 每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据。数据类型还帮助正确地排序数据,并在优化磁盘使用方面起重要的作用。
  • 主键(primary key):一列(或一组列),其值能够唯一区分表中每个行,任意两行都不具有相同的主键值。

主键规定:
每个行都必须具有一个主键值(主键列不允许NULL值)。
不更新主键列中的值;
不重用主键列的值;
不在主键列中使用可能会更改的值。


关于使用数据库

  • show databases;显示所有数据库

eg:show database;

+--------------------+
| Database         |
+--------------------+
| information_schema |
| mysql                |
| jachin                |
+--------------------+

  • use databasename; 打开数据库,才能读取其中内容

    eg:use jachin; 使用jachin数据库

  • show tables; 获得一个数据库内的表的列表

eg:show tables;
+---------------+
| Tables_in_ssm |
+---------------+
| appointment |
| book             |
+---------------+

  • show columns from tablename; 要求给出一个表名 ,它对每个字段返回一行,行中包含字段名、数据类型、是否允许NULL、键信息、默认值以及其他信息(如auto_increment)

eg: show columns from book;

  • help show ;  可以查看更多show的命令

关于检索

  • select columnname from tablename; 检索某表下的某列内容
  • select columnname1,columnname2,columnname3 from tablename; 检索某表下的某几列内容
  • select * from tablename; 检索整个表
  • select distinct columnname from tablename; 使用DISTINCT关键字,顾名思义,此关键字指示MySQL只返回不同的值
  • select columnname from tablename limit 5; 此语句使用SELECT语句检索单个列从第一个行开始不多于5行。
  • select columnname from tablename limit 5,5; 指示MySQL返回从行5开始的5行。第一个数为开始位置,第二个数为要检索的行数。
  • LIMIT 4 OFFSET 3:limit的另一种表达,意为从行3开始取4行,就像LIMIT 3, 4一样(注意: LIMIT 1, 1将检索出第二行而不是第一行)。

  完全限定

使用完全限定的名字来引用列(同时使用表名和列字)

  • select tablename.columnname from tablename;

eg: select book.name from book; 一般来说功能和 select name from book; 是一样的。


同理,表名也可以使用完全限定

  • select tablename.columnname from databasename.tablename;

eg: select book.name from jachin.book;

  

  排序

  • select columnname from tablename order by columnname; ORDER BY子句取一个或多个列的名字,据此对输出进行排序(ORDER BY(如从A到Z)顺序排序,且用非检索的列排序数据也是完全合法的)
  • select columnname from tablename order by A,B; 按多个列进行排序(如果A是姓列,B是名列,首先按姓排序,然后在每个姓中再按名排序)
  • order by ... DESC; 降序(从Z到A)排序,只应用到直接位于其前面的列名,如果想在多个列上进行降序排序, 必须对每个列指定DESC关键字,若不声明DESC,则按默认的顺序排序

eg:mysql> select * from book order by name ,number desc ;
+---------+--------+--------+
| book_id | name | number |
+---------+--------+--------+
| 1002   | c           | 10    |
| 1003   | c++       | 10    |
| 1004   | c++       | 10    |
| 1005   | c++       | 8      |
| 1000   | Java     | 8      |
| 1001   | python  | 10    |
+---------+--------+--------+

mysql> select * from book order by name desc ,number desc;
+---------+--------+--------+
| book_id | name | number |
+---------+--------+--------+
| 1001 | python | 10 |
| 1000 | Java | 8   |
| 1003 | c++   | 10 |
| 1004 | c++   | 10 |
| 1005 | c++   | 8   |
| 1002 | c       | 10 |
+---------+--------+--------+

  • select columnname from tablename order by columnname limit n; 如果使用LIMIT,它必须位于ORDER BY之后。

  WHERE

    只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件( filtercondition)。在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。  

WHERE子句在表名(FROM子句)之后给出:
select columnname from tablename where columnname=...;


在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后:

select columnname1 from tablename where columnname1=... order by columnname2 desc;

eg:mysql> select * from book where name="c++" order by number desc ;

+---------+------+--------+
| book_id | name | number |
+---------+------+--------+
| 1003 | c++ | 10 |
| 1004 | c++ | 10 |
| 1005 | c++ | 8   |
+---------+------+--------+


为了检查某个范围的值,可使用BETWEEN操作符

select columnname1 from tablename where columnname1 between n and m;

eg: mysql> select * from book where number between 7 and 9 ;
+---------+------+--------+
| book_id | name | number |
+---------+------+--------+
| 1000 | Java  | 8        |
| 1005 | c++    | 8        |
+---------+------+--------+


SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是IS NULL子句
select columnname1 from tablename where columnname2 is null;

操作符

用来联结或改变WHERE子句中的子句的关键字。也称为逻辑操作符( logicaloperator)如AND,OR等。

SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。用括号可消除因为圆括号具有较AND或OR操作符高的计算次序,由于AND和OR较简单,不再详写。

IN操作符

  • IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。 IN取合法值的由逗号分隔的清单,全都括在圆括号中。
  • IN用来指定要匹配值的清单的关键字,功能与OR相当。
  • 在使用长的合法选项清单时, IN操作符的语法更清楚且更直观。
  • 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
  • IN操作符一般比OR操作符清单执行更快。
  • IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。

select columnname1 from tablename where columnname1 in (1,n);
selectcolumnname1 from tablename where columnname1=1,columnname1=2...,columnname1=n; 

以上两句sql语句是等价的。


NOT操作符

WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。


LIKE操作符

% 百分号表示任何字符出现任意次数
select columnname1 from tablename where columnname1 like "c%"; 可匹配任意以c开头的字符串
注:WHERE name LIKE '%'不能匹配用值NULL的行

_ 下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符。
select columnname1 from tablename where columnname1 like "c_"; 可匹配任意以c开头且后面接着只有一个字符的字符串


mysql必知必会系列(一)的更多相关文章

  1. 《MySQL必知必会》[01] 基本查询

    <MySQL必知必会>(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材< ...

  2. 《MySQL必知必会》整理

    目录 第1章 了解数据库 1.1 数据库基础 1.1.1 什么是数据库 1.1.2 表 1.1.3 列和数据类型 1.1.4 行 1.1.5 主键 1.2 什么是SQL 第2章 MySQL简介 2.1 ...

  3. 《MySQL必知必会》学习笔记——前言

    前言 MySQL已经成为世界上最受欢迎的数据库管理系统之一.无论是用在小型开发项目上,还是用来构建那些声名显赫的网站,MySQL都证明了自己是个稳定.可靠.快速.可信的系统,足以胜任任何数据存储业务的 ...

  4. MySQL必知必会1-20章读书笔记

    MySQL备忘 目录 目录 使用MySQL 检索数据 排序检索数据 过滤数据 数据过滤 用通配符进行过滤 用正则表达式进行搜索 创建计算字段 使用数据处理函数 数值处理函数 汇总数据 分组数据 使用子 ...

  5. MySQL必知必会复习笔记(1)

    MySQL必知必会笔记(一) MySQL必知必会是一本很优秀的MySQL教程书,并且相当精简,在日常中甚至能当成一本工作手册来查看.本系列笔记记录的是:1.自己记得不够牢的代码:2.自己觉得很重要的代 ...

  6. 《MySQL 必知必会》读书总结

    这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...

  7. mysql学习--mysql必知必会1

     例如以下为mysql必知必会第九章開始: 正則表達式用于匹配特殊的字符集合.mysql通过where子句对正則表達式提供初步的支持. keywordregexp用来表示后面跟的东西作为正則表達式 ...

  8. 《mysql必知必会》读书笔记--存储过程的使用

    以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...

  9. mysql必知必会

    春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...

随机推荐

  1. 201521123092《java程序设计》第十三周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 2.1. 网络基础 1.1 比较ping www.baidu.com与ping cec.j ...

  2. Chrome控制台选择器简介

    Chrome的控制台是支持用$来获取元素的,这点可能是很多人不知道的.本篇文章将会简单介绍怎样更好的来使用这种快捷方式来获取元素. 判断当前窗口的$是来自谁的 我们知道jQ里面经常使用$来进行元素选择 ...

  3. Nodejs最好的ORM - TypeORM

    TypeORM是一个采用TypeScript编写的用于Node.js的优秀ORM框架,支持使用TypeScript或Javascript(ES5, ES6, ES7)开发.目标是保持支持最新的Java ...

  4. filter的两种使用方法

    1. 在模板中使用filter 我们可以直接在{{}}中使用filter,跟在表达式后面用 | 分割,语法如下: {{ expression | filter }} 也可以多个filter连用,上一个 ...

  5. [js高手之路] html5 canvas系列教程 - 图片操作(drawImage,clip,createPattern)

    接着上文[js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)继续,本文介绍的 ...

  6. 如何安装和配置 Rex-Ray?- 每天5分钟玩转 Docker 容器技术(74)

    Rex-Ray 是一个优秀的 Docker volume driver,本节将演示其安装和配置方法. Rex-Ray 以 standalone 进程的方式运行在 Docker 主机上,安装方法很简单, ...

  7. android studio集成ijkplayer

    介绍 ijkplayer是一款非常火的开源视频播放器,android和IOS通用.关于怎么编译怎么导入android Studio中自己的项目,其中坑很多,本篇记录下自己的操作记录.ijkplayer ...

  8. 你不容错过的 腾讯 AlloyTeam Web 前端大会 看点完全剖析

    AC大会 ( Alloyteam Conf ),是由腾讯前端技术团队的标杆团队 AlloyTeam 发起的前端技术大会,旨在分享团队在技术研究.产品研发.开源项目的经验沉淀.AC2017 将会继续在工 ...

  9. Go语言下载、安装、配置、使用

    Go语言 Go语言(Golang,The Go Programming Language),是谷歌2009发布的第二款开源编程语言.2009年7月份,谷歌曾发布了Simple语言,它是用来开发Andr ...

  10. mysql操作sql的小技巧

    本篇集中整理一下执行sql的小技巧,这种方式不仅带来了操作上的便捷,也可以保证数据可以数据的安全性. 1:查询数据(保证查询性能) 首先想先解释一下 SELECT * 和 SELECT t.id , ...