最近开始复习mysql,查漏补缺吧。

关于mysql

1.MySQL不区分大小写,但是在MySQL 4.1及之前的版本中,数据库名、表名、列名这些标识符默认是区分大小写的;在之后的版本中默认不区分大小写。
2.MySQL不需要在单条SQL语句后加上分号,但是在特定的DBMS(数据库管理系统)可能必须加分号以此结束。如果使用的是MySQL命令行,必须加上分号来结束SQL语句。

SELECT语句简单使用

SELECT COLUMNS FROM TABLE;

同时检索多列,字段名之间用英文逗号“,”分隔,最后一个字段名后不用跟逗号。一般,除非确实需要表中的每一列,否则别在SELECT语句中使用通配符“*”。因为检索不需要的列通常会降低检索和应用程序的性能。

1.DISTINCT关键字

使用此关键字表示去掉检索结果中相同的值。如果使用DISTINCT关键字,它必须直接放在字段名的前面。

1.不使用DISTINCT关键字

2.使用DISTINCT关键字

可以看到,使用了DISTINCT关键字后去掉了检索结果中的重复值。

问题:如果在DISTINCT关键字后面的跟多个列名呢?

  • 不使用DISTINCT关键字

  • 使用DISTINCT关键字

结果一样,但并不是DISTINCT关键字不起作用,DISTINCT关键字是应用于所有列的,而不是它后面紧接着的那一列。在有多列的情况下,每行的每个字段的值都相同时才不会被检索出来。如上,如果将值conductor2改成conductor1,那么第0行(和编程语言一样,检索结果序号也是从0开始)和第1行检索出来的两列值相同,所以只会出现一行。(这里不确定出现的是前一行还是后一行。)

(2)LIMIT关键字

LIMIT关键字放于查询语句末尾,用于限制检索结果的行数,即只返回制定的行数。

  • 不使用LIMIT关键字

共返回了11行。

  • 使用LIMIT关键字(带1个参数)

返回指定的行数,即5行。

  • 使用LIMIT关键字(带2个参数)

从第3行开始,共返回5行。

总结: LIMIT带一个参数,即返回总行数,从0行开始返回。LIMIT带2个参数,第一个参数表示从第几行处开始返回,第2个参数表示返回的总行数。另外,如果实际行数少于LIMIT后面设置的返回总行数,则返回实际行数。

在Mysql 5 中的LIMIT做了一点修改:LIMIT 3,4的含义容易被混淆,究竟是从第3行返回4行还是从第4行返回3行呢?因此在Mysql 5 中,出现了它的替代语法:LIMIT 4 OFFSET 3(返回4行,从第3行开始返回)

(3)使用完全限定的表名

在上面我们用到的查询语句都只是列名来查询,现在我们在列名前加上表名来查询:

SELECT user.password FROM user;
这条语句其实等价于SELECT password FROM user;但这里指定了一个完全限定的列名。

同样,我们也可以完全限定表名:

SELECT user.password FROM product.user;
前提是user表在product数据库中存在。

总结:列名前用表名限定,表名前用数据库名来限定。

(4)排序数据(ORDER BY子句)

一般的,检索出来的数据并不是以纯粹的随即顺序显示的。如果不排序,数据一般将以它在底层表中出现的顺序显示。这可以是数据最初添加到表中的顺序。但是,如果数据后来进行过更新或者删除,则此时的顺序将会受到MySQL重用回收存储空间的影响。

  • 关于MySQL重用存储空间:当你使用delete删除数据 时,mysql并不会回收被已删除数据的占据的存储空间以及索引位,而是空在那里,等待新的数据来弥补这个空缺。被删除的数据的信息将会被保存在一个链接清单中,当有新数据写入的时候,mysql会利用这些已删除的空间再写入。这样就有一个缺点,如果一时半会,没有数据来填补这个空缺,那这样就太浪费资源了。所以对于写比较频烦的表,要定期进行optimize(参考文章

1.单列排序

单列排序,指对表中某一列进行排序

  • 未使用排序子句

  • 使用排序子句

2.多列排序

同时对表中多个列进行排序

  • 未指定排序

  • 指定排序

多列排序,先将数据按照ORDER BY子句后的第一个字段排序,然后再按第二个字段排序......以此得到最重排序结果。其实,按多个列排序时,只有第一个字段中检索出有相同的值时,才会在按照第二个字段对第一列中相同的值对应的行再次排序。

3.指定排序方向

数据默认排序顺序时升序(从A到Z,0到9,对于汉字根据采用的编码排序参考文章1参考文章2),为了进行降序排序需要制定关键字DESC。

此处可以看到汉字没有按照顺序排序,原因及解决办法请看上面两篇参考文章。

  • 注意:DESC关键字只作用于直接位于其前的列名,所以想多列排序时都按降序排序,需要对每一列指定DESC关键字。
  • A与a:大多数DBMS中(包括MySQL),不区分大小写,即A与a相同,如果你要改变这种相同的顺序,简单的ORDER BY子句是无法做到的,需要靠数据库管理员来做一些改变。

(5)ORDER BY 与LIMIT组合

仅需一点:ORDER BY 应位于 FROM 后,LIMIT 应位于 ORDER BY 后。

(6)WHERE子句

在SELECT语句中,数据根据WHERE子句中制定的条件进行过滤。WHERE子句位于FROM后,位于ORDER BY子句前。

WHERE子句操作符:

LIKE操作符的通配符:

  • 百分号(%):表示任何字符出现任何次数('%'不会匹配到值NULL)
  • 下划线(_):匹配单个的任意字符

通配符搜索花费时间更长。所以不要过度使用,除非绝对需要,不要把他们放在开始处,因为这样搜索最慢。

正则表达REGEXP:

SELECT ... FROM ... WHERE ColumnName REGEXP '正则表达式';

正则表达式参考:mysql正则表达式

注意:在WHERE子句中如果是与字符串进行比较,则必须将比较值用引号括起来(单引号双引号皆可),与数值比较可以但不必用(无关表中字段类型只看具体值)。在使用LIKE的时候,也可匹配检索数值。

1.与AND操作符

使用AND操作符给WHERE子句附加条件,检索匹配WHERE子句后的全部条件的行。

2.与OR操作符

OR关键字检索匹配满足WHERE子句后任意一个条件的行。

3.AND与OR同时使用

造成这个结果的原因是:SQL在处理OR操作符之前会优先处理AND操作符。也就是说上面被SQL理解为,检索password为passd123456且money大于等于500的所有行,或password为123456的所有行。解决办法是 使用圆括号将相应的操作符分组

MySQL中SELECT语句简单使用的更多相关文章

  1. mysql进阶(四)mysql中select

    mysql中select * for update 注:  FOR UPDATE 仅适用于InnoDB,且必须在事务区块(BEGIN/COMMIT)中才能生效. 作用 锁定该语句所选择到的对象.防止在 ...

  2. MySQL中select * for update锁表的范围

    MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例 ...

  3. MySQL中select * for update锁表的问题

    MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例 ...

  4. 容易被忽略的事----sql语句中select语句的执行顺序

    关于Sql中Select语句的执行顺序,一直很少注意这个问题,对于关键字的使用也很随意,至于效率问题,因为表中的数据量都不是很大,所以也不是很在意. 今天在一次面试的时候自己见到了,感觉没一点的印象, ...

  5. MYSQL中的语句

    MYSQL中的语句 decimal(8,2):最多存10位数的数字,小数点后保存两位.如:999999.99

  6. MySQL-SQL语句中SELECT语句的执行顺序

    SELECT语句的执行顺序大家比较少关注,下面将为您详细介绍SQL语句中SELECT语句的执行顺序,供您参考,希望对您能够有所帮助. SELECT语句的执行的逻辑查询处理步骤: (8)SELECT ( ...

  7. mysql 中alter语句中change跟modify的区别

    mysql 中alter语句中change和modify的区别可以使用CHANGE old_col_name column_definition子句对列进行重命名.重命名时,需给定旧的和新的列名称和列 ...

  8. MYSQL语句中SELECT语句及其子句的执行顺序

    SELECT语句的执行的逻辑查询处理步骤:(8)SELECT (9)DISTINCT(11)<TOP_specification> <select_list>(1)FROM & ...

  9. MySQL数据库select语句的使用方法

    select语句可 以用回车分隔 $sql="select * from article where id=1"和 $sql="select * from article ...

随机推荐

  1. Scala 隐式转换及应用

    什么是隐式转换 我们经常引入第三方库,但当我们想要扩展新功能的时候通常是很不方便的,因为我们不能直接修改其代码.scala提供了隐式转换机制和隐式参数帮我们解决诸如这样的问题. Scala中的隐式转换 ...

  2. Java:并发不易,先学会用

    我从事Java编程已经11年了,绝对是个老兵:但对于Java并发编程,我只能算是个新兵蛋子.我说这话估计要遭到某些高手的冷嘲热讽,但我并不感到害怕. 因为我知道,每年都会有很多很多的新人要加入Java ...

  3. javascript正则表达式学习(二)--位置匹配

    文章首发于sau交流学习社区 一.前言 正则表达式是匹配模式,要么是匹配字符,要么匹配位置. 其实在开发中很少用到匹配位置,本篇文章主要包含: 二.什么是位置 位置:相邻字符之间的位置. 三.如何匹配 ...

  4. 【JVM虚拟机】(7)---深入理解Class中-属性集合

    #[JVM虚拟机](7)---深入理解Class中-属性集合 之前有关class文件已经写了两篇博客: 1.[JVM虚拟机](5)---深入理解JVM-Class中常量池 2.[JVM虚拟机](6)- ...

  5. C#ComboBox控件“设置 DataSource 属性后无法修改项集合”的解决方法

    在使用ComboBox控件时,遇到了重新绑定赋值出问题的情况.正常情况下,对于数据重新赋值的或者绑定数据源的时候,为了防止数据出现问题,都会先清空原来数据,所以就这样写了,但是没有相当恰恰这样写就出现 ...

  6. Asp.Net Core 轻松学-使用MariaDB/MySql/PostgreSQL和支持多个上下文对象

    前言 在上一篇文章中(Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库)[https://www.cnblogs.com/viter/p/10243577.html],介 ...

  7. 《k8s-1.13版本源码分析》-调度优选

    源码分析系列文章已经开源到github,地址如下: github:https://github.com/farmer-hutao/k8s-source-code-analysis gitbook:ht ...

  8. 开始在web中使用JS Modules

    本文由云+社区发表 作者: 原文:<Using JavaScript modules on the web> https://developers.google.com/web/funda ...

  9. 设计模式 | 抽象工厂模式(abstract factory)

    定义: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. 结构:(书中图,侵删) 这个图相对来说有一点点复杂,其实就是在工厂方法模式的基础上做了一些扩展,工厂方法模式只用于生成一种 ...

  10. Android注解框架实战-ButterKnife

    文章大纲 Android注解框架介绍 ButterKnife实战 项目源码下载   一.框架介绍 为什么要用注解框架?  在Android开发过程中,我们经常性地需要操作组件,操作方法有findVie ...