1

MySQL UNION 操作符语法格式:

SELECT expression1, expression2, ... expression_n

FROM tables

[WHERE conditions]

UNION [ALL | DISTINCT]

SELECT expression1, expression2, ... expression_n

FROM tables

[WHERE conditions];

  • expression1, expression2, ... expression_n: 要检索的列。
  • tables: 要检索的数据表。
  • WHERE conditions: 可选, 检索条件。
  • DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
  • ALL: 可选,返回所有结果集,包含重复数据

2

GROUP BY 语句根据一个或多个列对结果集进行分组。

在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

GROUP BY 语法

SELECT column_name, function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name;

DROP TABLE IF EXISTS `yy`;

CREATE TABLE `yy` (

`id` int(11) NOT NULL,

`name` char(10) NOT NULL DEFAULT '',

`date` datetime NOT NULL,

`singin` tinyint(4) NOT NULL DEFAULT '0' COMMENT '登录次数',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Records of `yyl`

INSERT INTO `yy` VALUES ('1', '22', '2016-04-22 15:25:33', '1'),

('2', '33', '2016-04-20 15:25:47', '3'),

('3', '11', '2016-04-19 15:26:02', '2'),

('4', '33', '2016-04-07 15:26:14', '4'),

('5', '22', '2016-04-11 15:26:40', '4'),

('6', '22', '2016-04-04 15:26:54', '2');

SET FOREIGN_KEY_CHECKS = 1;

使用 GROUP BY 语句 将数据表按名字进行分组,并统计每个人有多少条记录:

mysql> SELECT name, COUNT(*) FROM   yy GROUP BY name;

WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。

将以上的数据表按名字进行分组,再统计每个人登录的次数:

mysql> SELECT name, SUM(singin) as singin_count FROM  yy GROUP BY name WITH ROLLUP;

其中记录 NULL 表示所有人的登录次数。

使用 coalesce 来设置一个可以取代 NUll 的名称,coalesce 语法:

select coalesce(a,b,c);

参数说明:如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。

如果名字为空我们使用总数代替:

mysql> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM  yy GROUP BY name WITH ROLLUP;

3

JOIN 按照功能大致分为如下三类:

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

右连接

SELECT student.student_no, student.class_no, classes.class_name FROM student student RIGHT JOIN classes classes ON classes.class_no = student.class_no;

左连接

SELECT student.student_no, student.class_no, classes.class_name FROM student student LEFT JOIN classes classes ON classes.class_no = student.class_no;

内连接:

SELECT a.student_name, a.student_no, b.class_no FROM student a INNER JOIN classes b ON a.class_no = b.class_no;

等价于:

SELECT a.student_name, a.student_no, b.class_no FROM student a,  classes b where a.class_no = b.class_no;

4

MySQL使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。

为了处理这种情况,MySQL提供了三大运算符:

  • IS NULL: 当列的值是NULL,此运算符返回true。
  • IS NOT NULL: 当列的值不为NULL, 运算符返回true。
  • <=>: 比较操作符(不同于=运算符),当比较的的两个值为NULL时返回true。

关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。

在MySQL中,NULL值与任何其它值的比较(即使是NULL)永远返回false,即 NULL = NULL 返回false 。

MySQL中处理NULL使用IS NULL和IS NOT NULL运算符。

E.G.

create table nulldemo

-> (

-> name varchar(40) not null,

-> count int

-> );

insert into nulldemo(name,count) values('mark','22');

insert into nulldemo(name,count) values('martin',null);

insert into nulldemo(name,count) values('jan',null);

insert into nulldemo(name,count) values('jane','23');

SELECT * from nulldemo;

查找数据表中 count 列是否为 NULL,必须使用IS NULL和IS NOT NULL

用nulldemo表为例:

查找name字段中以'st'为开头的所有数据:

SELECT name FROM nulldemo WHERE name REGEXP '^mar';

查找name字段中以'ok'为结尾的所有数据:

SELECT name FROM nulldemo WHERE name REGEXP 'in$';

查找name字段中包含'mar'字符串的所有数据:

SELECT name FROM nulldemo WHERE name REGEXP 'mar';

先插入一个以元音字母开头的名字:

insert into nulldemo values('online','34');

查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:

SELECT name FROM nulldemo WHERE name REGEXP '^[aeiou]|in$';

5

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

  • 在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务
  • 事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行
  • 事务用来管理insert,update,delete语句

一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)

  • 1、事务的原子性:一组事务,要么成功;要么撤回。
  • 2、稳定性 : 有非法数据(外键约束之类),事务撤回。
  • 3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
  • 4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。
    • start transaction  开始一个事务

savepoin  保存点名称

操作

  • 可以回滚,可以提交,没有问题,就提交,有问题就回滚。

6

需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令。

create table alterdemo

-> (

-> i int,

-> c char(1)

-> );

SHOW COLUMNS FROM alterdemo;

ALTER TABLE alterdemo  DROP i;

如果数据表中只剩余一个字段则无法使用DROP来删除字段。

alter table alterdemo drop i;

MySQL 中使用 ADD 子句来想数据表中添加列,如下实例在表alterdemo中添加 i 字段,并定义数据类型:

alter table alterdemo add i int;执行以上命令后,i 字段会自动添加到数据表字段的末尾。

SHOW COLUMNS FROM alterdemo;

如果你需要指定新增字段的位置,可以使用MySQL提供的关键字 FIRST (设定位第一列), AFTER 字段名(设定位于某个字段之后)。

尝试以下 ALTER TABLE 语句, 在执行成功后,使用 SHOW COLUMNS 查看表结构的变化:

ALTER TABLE alterdemo DROP i;

ALTER TABLE alterdemo ADD i INT FIRST;

ALTER TABLE alterdemo DROP i;

ALTER TABLE alterdemo ADD i INT AFTER c;

FIRST 和 AFTER 关键字只占用于 ADD 子句,所以如果你想重置数据表字段的位置就需要先使用 DROP 删除字段然后使用 ADD 来添加字段并设置位置。

修改字段类型及名称

如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。

ALTER TABLE alterdemo MODIFY c CHAR(10);

使用 CHANGE 子句, 语法有很大的不同。 在 CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型。

ALTER TABLE alterdemo CHANGE i j BIGINT;

修改字段时,可以指定是否包含只或者是否设置默认值。指定字段 j 为 NOT NULL 且默认值为100 。

ALTER TABLE alterdemo CHANGE j j INT;

使用 ALTER 来修改字段的默认值

ALTER TABLE alterdemo modify j BIGINT not null default 100;

使用 ALTER 命令及 DROP子句来删除字段的默认值

alter table alterdemo alter j drop default;

使用 ALTER 命令及 TYPE 子句来完成。尝试以下实例,我们将表 alterdemo的类型修改为 MYISAM :

查看数据表类型可以使用 SHOW TABLE STATUS 语句。

alter table alterdemo engine=myisam;

show table status like 'alterdemo'\G

如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使用 RENAME 子句来实现。

alter table alterdemo rename to alterdem;

自己做得任务发出来的,很久了。

mysql查改的更多相关文章

  1. nodejs连接mysql并进行简单的增删查改

    最近在入门nodejs,正好学习到了如何使用nodejs进行数据库的连接,觉得比较重要,便写一下随笔,简单地记录一下 使用在安装好node之后,我们可以使用npm命令,在项目的根目录,安装nodejs ...

  2. php mysql增删查改

    php mysql增删查改代码段 $conn=mysql_connect('localhost','root','root');  //连接数据库代码 mysql_query("set na ...

  3. node.js+mysql增删查改

    数据库和表: -- -- 数据库: `test` -- -- -------------------------------------------------------- -- -- 表的结构 ` ...

  4. PHP与MYSQL结合操作——文章发布系统小项目(实现基本增删查改操作)

    php和mysql在一起几十年了,也是一对老夫老妻了,最近正在对他们的爱情故事进行探讨,并做了一个很简单的小东西——文章发布系统,目的是为了实现mysql对文章的基本增删查改操作 前台展示系统有:文章 ...

  5. mysql 增删查改

    非关系型数据库关系型数据库Oracle mysql sqlserver db2 Postgresql Sqlite access sqlserver 微软db2 ibm================ ...

  6. mybatis、spring、mysql、maven实现简单增删查改

    之前写过的mybatis博客作为学习mybatis.spring还是不太合适. 现在找到一个不错的例子,首先将这个完整的mybatis增删查改例子在本地上实现出来,然后再进行学习. 项目结构与运行结果 ...

  7. Java连接MySQL数据库及简单的增删查改操作

    主要摘自 https://www.cnblogs.com/town123/p/8336244.html https://www.runoob.com/java/java-mysql-connect.h ...

  8. Python对MySQL进行增删查改

    python连接MySQL数据库:pymysql # 测试操作 import pymysql # 打开数据库 db = pymysql.connect("localhost", & ...

  9. 后端Spring Boot+前端Android交互+MySQL增删查改(Java+Kotlin实现)

    1 前言&概述 这篇文章是基于这篇文章的更新,主要是更新了一些技术栈以及开发工具的版本,还有修复了一些Bug. 本文是SpringBoot+Android+MySQL的增删查改的简单实现,用到 ...

随机推荐

  1. Yii2 创建新项目目录

    默认的高级应用模板包括三个应用 backend – 应用的后台 frontend – 应用的前台 console – 应用的控制台应用 那么如果我们要在增加应用呢?比如在加一个手机端的应用,或者后台和 ...

  2. LeetCode 655. Print Binary Tree (C++)

    题目: Print a binary tree in an m*n 2D string array following these rules: The row number m should be ...

  3. vim搭建C编程IDE

    曾经在一篇关于vim技巧的文章里有一句话:"世界上只有三种编辑器,EMACS.VIM和其它." 我不知道这是不是太过于绝对了,但是从我所看到的每一篇linux下编程以及文字编辑的文 ...

  4. php之 常用的 流程管理

    1.流程管理的用法是什么样的? 2.怎么发起想要的流程? 3.审批的人要是怎么审批通过? 4.流程审核是不是要挨个走过? 一.要有数据库的内容的 肯定会有表的,首先就是用户表了,然后就是流程表,用户编 ...

  5. 网桥 以及 IEEE802.1D 生成树协议

    (一)网桥 网桥是一个layer 2设备,能够连接两个不同的网段. 如图

  6. 关于jsonp知识的理解

    jsonp 之前知道是用来解决ajax跨域的问题,但是其本质的原理,还是不清楚. 所以看了一下. js的script 的src里面的连接是可以跨域的,所以可以通过她来实现跨域资源获取. 但是也需要后端 ...

  7. appium启动sdk的android模拟器

    (1)启动sdk安装目录下的AVD Manager.exe (2)如下图,点击[create]按钮 (3)如下图,设置虚拟机的配置,至于Target中的:Android 4.4.2是在安装sdk的时候 ...

  8. aes python加密

    # *_*coding:utf-8 *_* #AES-demo import base64 from Crypto.Cipher import AES ''' 采用AES对称加密算法 ''' # st ...

  9. Android 开发工具下载中文网站

    Android官方网站(develop.android.com)因为被墙而无法访问.这时可以访问中文网址: http://wear.techbrood.com/ SDK Manager 代理及安装文件 ...

  10. Linux中Apache+Tomcat+JK实现负载均衡和群集的完整过程

    人原创,一个字一个字地码的,尊重版权,转载请注明出处! http://blog.csdn.net/chaijunkun/article/details/6987443 最近在开发的项目需要承受很高的并 ...