关于MySQL数据库常用SQL语句操作增、删、改、查,注释,模糊查询,多表联动,正则表达式

详解MySQL数据库常用sql语句操作增、删、改、查,注释,模糊查询,多表联动,正则表达式等

1.sql语句中的单行注释

2.多行注释

3. 新建数据库

4.删除数据库

5. 创建表

6.MySQL 删除数据表

7.MySQL 插入数据

8.MySQL 查询数据

9.MySQL UPDATE 更新记录

10.MySQL DELETE 语句删除记录

11.MySQL LIKE 子句 模糊查询

扫描二维码关注公众号,回复: 11206773 查看本文章

12.MySQL UNION 操作符  联合查询

13.MySQL 排序

14.MySQL GROUP BY 语句

15.MySQL 连接的使用  多表联动查询

16.MySQL NULL值处理

17. MySQL中使用 REGEXP 操作符来进行正则表达式匹配。

两个--后接一个空格

-- 测试注释

2.多行注释

/*

 多行注释

 gang

*/

3. 新建数据库

CREATE DATABASE 数据库名;

4.删除数据库

DROP DATABASE <数据库名>;

5. 创建表

语法: 

CREATE TABLE table_name (column_name column_type);

CREATE TABLE `address` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `user_id` int(11) NOT NULL DEFAULT '0' COMMENT '用户表的用户ID',

  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '收货人名称',

  `first_name` varchar(255) DEFAULT NULL,

  `last_name` varchar(255) DEFAULT NULL,

  `sure_name` varchar(255) DEFAULT NULL,

  `postal_code` varchar(255) DEFAULT NULL COMMENT '邮政编码',

  `country_code` varchar(10) DEFAULT NULL,

  `tel` varchar(30) NOT NULL DEFAULT '' COMMENT '手机号码',

  `province` varchar(255) NOT NULL COMMENT '行政区域表的省ID',

  `city` varchar(255) NOT NULL COMMENT '行政区域表的市ID',

  `county` varchar(255) NOT NULL COMMENT '行政区域表的区县ID',

  `address_detail` varchar(255) NOT NULL DEFAULT '' COMMENT '详细收货地址',

  `area_code` char(6) DEFAULT NULL COMMENT '地区编码',

  `is_default` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否默认地址',

  `add_time` datetime DEFAULT NULL COMMENT '创建时间',

  `update_time` datetime DEFAULT NULL COMMENT '更新时间',

  `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除',

  PRIMARY KEY (`id`),

  KEY `user_id` (`user_id`)

) ENGINE=InnoDB AUTO_INCREMENT=108 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='收货地址表';

 上面案例说明:

  • 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
  • AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
  • PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
  • ENGINE 设置存储引擎,CHARSET 设置编码。
  • COMMENT 设置备注
  • int  varchar datetime tinyint char是数据库数据类型

6.MySQL 删除数据表

语法:  

DROP TABLE table_name

-- 删除

DROP TABLE `admin`;

-- 下边这个是如果存在这个表,就删除

DROP TABLE IF EXISTS `address`;  

7.MySQL 插入数据

语法: 

INSERT INTO table_name ( field1, field2,...fieldN )

                       VALUES

                       ( value1, value2,...valueN );

INSERT INTO `runoob_tbl` VALUES ('1', '学习 PHP', '菜鸟教程', '2017-04-12'), ('2', '学习 MySQL', '菜鸟教程', '2017-04-12'), ('3', '学习 Java', 'RUNOOB.COM', '2015-05-01'), ('4', '学习 Python', 'RUNOOB.COM', '2016-03-06'), ('5', '学习 C', 'FK', '2017-04-05');

8.MySQL 查询数据

以下为在MySQL数据库中查询数据通用的 SELECT 语法:

SELECT column_name,column_name

FROM table_name

[WHERE Clause]

[LIMIT N][ OFFSET M]

  • 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
  • SELECT 命令可以读取一条或者多条记录。
  • 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
  • 你可以使用 WHERE 语句来包含任何条件。
  • 你可以使用 LIMIT 属性来设定返回的记录数。
  • 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。

- 查询

-- SELECT * FROM runoob_tbl;

-- SELECT * FROM runoob_tbl WHERE runoob_author='as';

-- MySQL 的 WHERE 子句的字符串比较是不区分大小写的。 你可以使用 BINARY 关键字来设定 WHERE 子句的字符串比较是区分大小写的

-- SELECT * from runoob_tbl WHERE BINARY runoob_author='AS';

给数据做分页的时候 offset为limit的倍数  假设每页显示数量为5, 第一页数据则是1-5 第二页就是吧offset 设置成5依次类推写个函数即可。

9.MySQL UPDATE 更新记录

以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法:

UPDATE table_name SET field1=new-value1, field2=new-value2

[WHERE Clause]

  • 你可以同时更新一个或多个字段。
  • 你可以在 WHERE 子句中指定任何条件。
  • 你可以在一个单独表中同时更新数据。

-- 更新

UPDATE runoob_tbl SET runoob_title='学习BUKEKU' WHERE runoob_id=2;

-- 这个语句的含义 是 runoob_id =2的时候我改这个runoob_title为'学习BUKEKU'

10.MySQL DELETE 语句删除记录

以下是 SQL DELETE 语句从 MySQL 数据表中删除数据的通用语法:

DELETE FROM table_name [WHERE Clause]

  • 你可以在 WHERE 子句中指定任何条件
  • 您可以在单个表中一次性删除记录。

如果没有指定 WHERE 子句MySQL 表中的所有记录将被删除

-- 删除

DELETE FROM runoob_tbl WHERE runoob_id=4;

11.MySQL LIKE 子句 模糊查询

以下是 SQL SELECT 语句使用 LIKE 子句从数据表中读取数据的通用语法:

SELECT field1, field2,...fieldN

FROM table_name

WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'

  • 你可以在 WHERE 子句中指定任何条件。
  • 你可以在 WHERE 子句中使用LIKE子句。
  • 你可以使用LIKE子句代替等号 =。
  • LIKE 通常与 % 一同使用,类似于一个元字符的搜索。
  • 你可以使用 AND 或者 OR 指定一个或多个条件。
  • 你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句来指定条件。

/*

like 匹配/模糊匹配,会与 % 和 _ 结合使用。

'%a'     //以a结尾的数据

'a%'     //以a开头的数据

'%a%'    //含有a的数据

'_a_'    //三位且中间字母是a的

'_a'     //两位且结尾字母是a的

'a_'     //两位且开头字母是a的

*/

SELECT * from runoob_tbl  WHERE runoob_author LIKE 'a%';

-- 找到以a开头的。

12.MySQL UNION 操作符  联合查询

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

语法

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: 可选,返回所有结果集,包含重复数据。

user表: 

 

user2表: 

 

SELECT name,age FROM user WHERE age>35

UNION

SELECT name,age FROM user2 WHERE age>40

ORDER BY age;

结果: 

 

13.MySQL 排序

MySQL 的 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。

以下是 SQL SELECT 语句使用 ORDER BY 子句将查询数据排序后再返回数据:

SELECT field1, field2,...fieldN FROM table_name1, table_name2...

ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]

  • 你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
  • 你可以设定多个字段来排序。
  • 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
  • 你可以添加 WHERE...LIKE 子句来设置条件。

-- 排序  ASC升序 DESC 降序

SELECT * FROM user WHERE age>19 ORDER BY age DESC;

14.MySQL GROUP BY 语句

现将下方的sql导入到自己数据库

SET NAMES utf8;

SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------

--  Table structure for `employee_tbl`

-- ----------------------------

DROP TABLE IF EXISTS `employee_tbl`;

CREATE TABLE `employee_tbl` (

  `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 `employee_tbl`

-- ----------------------------

BEGIN;

INSERT INTO `employee_tbl` VALUES ('1', '小明', '2016-04-22 15:25:33', '1'), ('2', '小王', '2016-04-20 15:25:47', '3'), ('3', '小丽', '2016-04-19 15:26:02', '2'), ('4', '小王', '2016-04-07 15:26:14', '4'), ('5', '小明', '2016-04-11 15:26:40', '4'), ('6', '小明', '2016-04-04 15:26:54', '2');

COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

GROUP BY 语法

SELECT column_name, function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name;

 SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;

 

SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;

 

COUNT数量, SUM总和

/*

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

select coalesce(a,b,c);

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

*/

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

/*

+--------------------------+--------------+

| coalesce(name, '总数') | singin_count |

+--------------------------+--------------+

| 小丽                   |            2 |

| 小明                   |            7 |

| 小王                   |            7 |

| 总数                   |           16 |

+--------------------------+--------------+

*/

 

15.MySQL 连接的使用  联合多表查询

MySQL 的 JOIN 在两个或多个表中查询数据。

你可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。

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

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

先执行下边sql文件生成2个表

/*

 Navicat MySQL Data Transfer

 Source Server         : 127.0.0.1

 Source Server Version : 50621

 Source Host           : localhost

 Source Database       : RUNOOB

 Target Server Version : 50621

 File Encoding         : utf-8

 Date: 04/13/2017 14:25:12 PM

*/

SET NAMES utf8;

SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------

--  Table structure for `runoob_tbl`

-- ----------------------------

DROP TABLE IF EXISTS `runoob_tbl`;

CREATE TABLE `runoob_tbl` (

  `runoob_id` int(11) NOT NULL AUTO_INCREMENT,

  `runoob_title` varchar(100) NOT NULL,

  `runoob_author` varchar(40) NOT NULL,

  `submission_date` date DEFAULT NULL,

  PRIMARY KEY (`runoob_id`)

) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------

--  Records of `runoob_tbl`

-- ----------------------------

BEGIN;

INSERT INTO `runoob_tbl` VALUES ('1', '学习 PHP', '软件测试培训', '2017-04-12'), ('2', '学习 MySQL', '软件测试培训', '2017-04-12'), ('3', '学习 Java', 'RUNOOB.COM', '2015-05-01'), ('4', '学习 Python', 'RUNOOB.COM', '2016-03-06'), ('5', '学习 C', 'FK', '2017-04-05');

COMMIT;

-- ----------------------------

--  Table structure for `tcount_tbl`

-- ----------------------------

DROP TABLE IF EXISTS `tcount_tbl`;

CREATE TABLE `tcount_tbl` (

  `runoob_author` varchar(255) NOT NULL DEFAULT '',

  `runoob_count` int(11) NOT NULL DEFAULT '0'

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------

--  Records of `tcount_tbl`

-- ----------------------------

BEGIN;

INSERT INTO `tcount_tbl` VALUES ('菜鸟教程', '10'), ('RUNOOB.COM ', '20'), ('Google', '22');

COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

两个表的结构

runoob_tbl

 

tcount_tbl

 

   

JOIN 取交集

执行

SELECT a.runoob_id,a.runoob_title, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;

结果

 

LEFT JOIN

取左表的全部,和右边对应不上的为null

SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;

+-------------+-----------------+----------------+

| a.runoob_id | a.runoob_author | b.runoob_count |

+-------------+-----------------+----------------+

| 1           | 软件测试培训    | 10             |

| 2           | 软件测试培训    | 10             |

| 3           | RUNOOB.COM      | 20             |

| 4           | RUNOOB.COM      | 20             |

| 5           | FK              | NULL           |

+-------------+-----------------+----------------+

RIGHT JOIN

会读取右表的全部,左表没有的标null

SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;

+-------------+-----------------+----------------+

| a.runoob_id | a.runoob_author | b.runoob_count |

+-------------+-----------------+----------------+

| 1           | 软件测试培训   | 10             |

| 2           | 软件测试培训   | 10             |

| 3           | RUNOOB.COM      | 20             |

| 4           | RUNOOB.COM      | 20             |

| NULL        | NULL            | 22             |

+-------------+-----------------+----------------+

16.MySQL NULL值处理

以下两条语句是不生效的

SELECT * FROM runoob_test_tbl WHERE runoob_count = NULL;

SELECT * FROM runoob_test_tbl WHERE runoob_count != NULL;

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

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

要这样子写

SELECT * FROM runoob_test_tbl WHERE runoob_count IS NULL;

SELECT * FROM runoob_test_tbl WHERE runoob_count IS NOT NULL;

17. MySQL中使用 REGEXP 操作符来进行正则表达式匹配。

-- 正则 关键字 REGEXP

SELECT * FROM runoob_new WHERE runoob_author REGEXP '^R';

   

猜你喜欢

转载自www.cnblogs.com/mengjie1016/p/12901313.html