查询是很大的一块,所以这里我只会写mysql的特点,就我目前使用的情况,MYSQL对标准SQL是比较支持,如果是新手的话,建议去w3school 学习标准SQL.

1.DUAL

DUAL是一个虚拟表,即该表是不存在的,用于直接select 标量时,使语句看起来符合sql规范

-- MSSQL
select 1,'A'
-- Oracle中dual 不可缺少
select 1,'A' from DUAL
-- mysql 以下2种格式都支持
select 1,'A';
select 1,'A' from DUAL;

2.LIMIT

相对MSSQL来说,MYSQL并没有TOP关键字,但有LIMIT,而且效率更高且更灵活

SELECT * FROM usr LIMIT 1;
-- LIMIT 1 的意思是取1条记录, MYSQL在取完1条记录后将不再操作. SELECT * FROM usr LIMIT 0,2;
-- LIMIT 0,2的意思是从第一行(包括第一行)开始,取2条记录 SELECT * FROM usr WHERE u_id IN (SELECT u_id FROM usr WHERE dept='信息部' LIMIT 1);
-- 该语句执行时,MYSQL会报错,意思是不能在子查询中使用limit
-- 解决办法,将使用limit的语句再套一层表即可;如下:
SELECT * FROM usr WHERE u_id IN (SELECT * FROM (SELECT u_id FROM usr WHERE dept='信息部' LIMIT 1)aa) PS:MSSQL中使用TOP,数据库会先排序,然后再返回数据,因此limit的效率比较高

3.子查询的update错误

UPDATE usr SET usr_name='匿名' WHERE u_id IN (SELECT u_id FROM usr WHERE dept='信息部')
-- 语句报错,大概意思是修改表不能使用自身
-- 解决方法,跟上面一样,再套一层表即可
UPDATE usr SET usr_name='匿名' WHERE u_id IN (SELECT * FROM (SELECT u_id FROM usr WHERE dept='信息部')aa)

4.变量声明

mysql的查询语句中,变量不需要声明,直接赋值即可, @表示局部变量(仅在当前会话有效) @@表示全局变量

-- 使用set 赋值有以下2种方法
set @num=1;
set @num:=1;
-- 以下使用select 赋值
select @num:=1;
以上三种方法效果是一样的。 SELECT @num:=deptid FROM dept
-- 查询语句赋值

5.不报错机制

用了一段时间后,发现mysql中一大特点就是一些常规的错误情况往往不报错而正常运行。但是虽然正常运行,不过结果可能往往不是你想要的,所以我认为这并不是好事,正因为不报错,导致一些错误情况而不知道。

-- ①以0作除数
select 1/0 -- 结果为null
-- ②插入日期字段时,日期格式错误
insert into mytable(created_date) values('215-5-5') -- 插入值为'0000-00-00 00:00:00'
-- ③group by
SELECT deptid,dname FROM dept GROUP BY dname;
SELECT deptid,MAX(dname) FROM dept GROUP BY dname;
-- 以上语句mssql中会报错,select的字段必须存在分组字段中,但是mysql会正确运行,至于这样的做法有什么意义,我现在还没明白
-- ④where条件中数据类型不一致
select * from bill where b_id='a';
-- 说明:b_id 为int,mssql中会先将'a'转换成数字,于是报错; 而mysql会运行通过
SELECT * FROM dept WHERE deptid=1;
-- 说明:deptid为varchar,mssql中会将1转换成字符'1';运行正确
-- 而mysql会将deptid中含有'1'的数据都会过滤出来,执行类似于 like 的操作;因此如果要得到正确的数据,必须确保与deptid的类型一致,如下:
SELECT * FROM dept WHERE deptid=''
-- 最后强调在mysql中where 的条件语句中的左右字段类型必须相同,否则可能会得到你不想要的数据

6.获取自增ID

MYSQL中自增ID有2种方法; 先执行插入语句,然后紧跟着执行以下语句

-- 使用全局变量@@IDENTITY,但是一般的程序应用中往往都会使用多个数据库连接会话,所以全局变量绝大部分情况是不合适的
SELECT @@IDENTITY
-- 使用LAST_INSERT_ID(), 该函数是针对当前连接会话获取最新插入的ID,所以更合适一般程序的使用.
SELECT LAST_INSERT_ID()

使用SELECT LAST_INSERT_ID() 好像没有问题,但是仍有讲究的地方;在程序开发的过程中要确保"插入语句"和"获取自增id"在同一个会话中执行紧贴着执行; 如果使用批量插入 insert into mytable(name) values('name1'),('name2')  那么LAST_INSERT_ID()只获取到第一条记录的id

MYSQL基础02(查询)的更多相关文章

  1. 2-14-1 MySQL基础语句,查询语句

    一. SQL概述 结构化查询语言(Structured Query Language)简称SQL 1. 它是一种特殊目的的编程语言 2. 它还是一种数据库查询和程序设计语言 (用于存取数据以及查询.更 ...

  2. 10. MySQL基础-02条件查询、排序查询

    2. 条件查询 语法 ​ select 查询列表 from 表名 where 筛选条件: 分类 按条件表达式筛选 简单的条件运算符:> < = != <> >= ⇐ 按逻 ...

  3. mysql基础之查询缓存、存储引擎

    一.查询缓存 "查询缓存",就是将查询的结果缓存下载,如果查询语句完全相同,则直接返回缓存中的结果. 如果应用程序在某个场景中,需要经常执行大量的相同的查询,而且查询出的数据不会经 ...

  4. Mysql 基础 高级查询

    在西面内容中    car  和  nation   都表示 表名 1.无论 高级查询还是简单查询   都用  select.. from..语句   from  后面 加表名  可以使一张表也可以是 ...

  5. mysql基础查询语法

    一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count( ...

  6. sql 基础练习 计算7天各个时间点的总和 group by order mysql一次查询多个表

    SQL 基础练习 -- 创建数据库 CREATE DATABASE school CHARACTER SET UTF8; -- 使用数据库 USE school; -- id: 学生的id -- na ...

  7. 数据库02 /MySQL基础数据类型、完整性约束、sql_mode模式

    2.MySQL基础数据类型.完整性约束.sql_mode模式 目录 2.MySQL基础数据类型.完整性约束.sql_mode模式 1. MySQL常用数据类型 MySQL常用数据类型预览 1. 1 数 ...

  8. mysql 基础入门 单表查询

    单表查询 select 表头,表头 as 别名 ,表头(+-*/的运算) from table_a 1.条件查询 where + 条件 <> , != 不等于 = 等于,也可以表示字符串值 ...

  9. 02 mysql 基础二 (进阶)

    mysql 基础二 阶段一 表约束 1.not null 非空约束 例子: create table tb1( id int, name varchar(20) not null ); 注意 空字符不 ...

随机推荐

  1. 如何进行js动态生成option?如何实现二级连动?

    何为二级连动? 首先要明白什么是二级连动!顾名思义,就是一个动,另外一个也跟着一起动 看下面的例子: 这里有一个“市级”的选择列表框,还有一个“县级”的选择列表框,如果“市级”的选择列表框中的值发现变 ...

  2. 微信公共服务平台开发(.Net 的实现)9-------处理二维码

    今天我们来共同学习一下微信公共服务平台中一个重要内容---二维码扫描.众所周知二维码目前应用范围很广,在这里不再叙述背景了,但是值得一提的是目前大家手机上面应用的二维码扫描工具是支持的都是QR码和PD ...

  3. iOS开发——实用技术OC篇&简单抽屉效果的实现

    简单抽屉效果的实现 就目前大部分App来说基本上都有关于抽屉效果的实现,比如QQ/微信等.所以,今天我们就来简单的实现一下.当然如果你想你的效果更好或者是封装成一个到哪里都能用的工具类,那就还需要下一 ...

  4. 浏览器使用ActiveX控件

    在IE中使用ActiveX控件,需要使用HTML中的标志是<OBJECT>,该标记几个重要的参数特性有:1.ID:为控件提供一个标识名称,为HTML代码提供一种访问该控件的入口.2.CLA ...

  5. 词法分析器Demo

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Lexe ...

  6. php与mysql通讯那点事

    php与mysql通讯那点事 http://www.cnxct.com/libmysql-mysqlnd-which-is-best-and-what-about-mysqli-pdomysql-my ...

  7. C#基础--.net平台的重要组成部分以及.net程序简单的编译原理

    .net平台的组成只要有两部分   FCL:框架类库    CLR:公共语言运行时 .net程序简单的编译原理 1.0:使用C#编译器(csc.exe) 将C#源代码编译成程序集+{编译之前:会检查C ...

  8. [ASP.NET] Session的了解

    ASP.NET Session的使用当中我们会遇到很多的问题,那么这里我们来谈下经常出现的一些常用ASP.NET Session的理解: ASP.NET Session的七点认识之一 对于值类型的变量 ...

  9. Java Properties类

    Properties 是哈希表的一个子类.它是用来维持值列表,其中的键是一个字符串,值也是一个字符串. Properties类被许多其他的Java类使用.例如,它是对象通过System.getProp ...

  10. Java异常的一个小知识

    有以下两个代码: package com.lk.A; public class Test3 { public static void main(String[] args) { try { int a ...