欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

代码(1)

程序员文章站 2022-06-23 19:57:53
...

数据库:

创建数据库

CREATE DATABASE mysql_test;

选择数据库

USE db_name;

修改数据库(修改默认字符集和校对规则)

ALTER DATABASE mysql_test

DEFAULT CHARACTER SET gb2312

DEFAULT COLLATE gb2312_chinese_ci;

删除数据库

DROP DATABASE IF EXISTS mysqltest;

查看数据库

SHOW DATABASES;

创建和操纵表:

创建表

USE mysql_test;

CREATE TABLE customers(

cust_id INT NOT NULL AUTO_INCREMENT,

cust_name CHAR(50) NOT NULL;

cust_sex CHAR(1) NOT NULL DEFAULT 0,

cust_address CHAR(50) NULL,

cust_contact CHAR(50) NULL,

PRIMARY KEY(cust_id)

)ENGINE=InnoDB;

更新表

1.ADD

ALTER TABLE mysql_test.customers

ADD COLUMN cust_city CHAR(10) NOT NULL DEFAULT 'Wuhan' AFTER cust_sex;

2.CHANGE[COLUMN]

ALTER TABLE mysql_test.customers

CHANGE COLUMN cust_sex sex CHAR(1) NULL DEFAULT 'M';

3.ALTER[COLUMN]

ALTER TABLE mysql_test.customers

ALTER COLUMN cust_city SET DEFAULT 'Beijing';

4.MODIFY[COLUMN]

ALTER TABLE mysql_test.customers

MODIFY COLUMN cust_name CHAR(20) FIRST;

5.DROP[COLUMN]

ALTER TABLE mysql_test.customers

DROP COLUMN cust_contact;

6.RENAME[TO]赋予新的表名

ALTER TABLE mysql_test.customers

RENAME TO mysql_test.backkup_customers;

重命名表

RENAME TABLE mysql_test.backup_customers TO mysql_test.customers;

复制表

CREATE TABLE mysql_test.customers_copy

LIKE mysql_test.customers;

删除表

DROP TABLE IF EXISTS mysql_test.customers

查看表

显示表的名称

USE mysql_test;

SHOW TABLES;

显示表的结构

DESC mysql_test.customers;

表数据的基本操作:

插入表数据

使用insert语句插入表数据

INSERT VALUES

INSERT INTO mysql_test.customers

VALUES(901,'张三','F','北京市','朝阳区');

最好:

INSERT INTO mysql_test.customers(cust_id,cust_name,cust_sex,cust_address,cust_contact)

VALUES(0,'李四',DEFAULT,'武汉市',NULL);

INSERT SET

INSERT INTO mysql_test.customers

SET cust_name='李四',cust_address='武汉市',cust_sex=DEFAULT;

一次性插入两条语句

INSERT INTO mysql_test.customers(cust_address,cust_sex,cust_name)

VALUES('武汉市',DEFAULT,'李四'),

     ('北京市','F','张三');

 

INSERT SELECT

INSERT INTO mysql_test.customers(cust_id,cust_name,cust_sex,cust_address,cust_contact)

SELECT cust_id,cust_name,cust_sex,cust_address,cust_contact 

FROM mysql_test.customers_copy;

(为了防止插值出错,一般主键自己生成)

使用REPLACE语句插入表数据

REPLACE INTO mysql_test.customers(cust_id,cust_name,cust_sex,cust_address,cust_contact)

VALUES(901,'王五','M','广州市','越秀区');

(替换,主键不允许重复,replace语句将原数据替换)

删除表数据

单表删除

DELETE FROM mysql_test.customers

WHERE cust_name='王五';

多表删除

DELETE tb1,tb2 FROM tb1,tb2,tb3

WHERE tb1.id=tb2.id AND tb2.id=tb3.id;

使用TRUNCATE删除表数据

修改表数据

UPDATE修改单表数据

UPDATE mysql_test.customers

SET cust_address='武汉市';

WHERE cust_name='张三';

UPDATE修改多表数据

UPDATE tb1,tb2 SET tb1.name='李明',tb2.name='张亮'

WHERE tb1.id=tb2.id;

数据库的查询

选择指定的列

SELECT cust_name,cust_sex,cust_address

FROM mysql_test.customers;

SELECT * FROM mysql_test.customers;

定义并使用列的别名

SELECT cust_name,cust_address AS '地 址',cust_contact

FROM mysql_test.customers;

注意:列别名不允许出现在WHERE子句中

替换查询结果集中的数据

SELECT cust_name,

CASE

WHEN cust_sex='M' THEN '男'

ELSE '女'

END AS 性别

FROM mysql_test.customers;

计算列值

SELECT cust_name,cust_sex,cust_id+100

FROM mysql_test.custormers;

聚合函数

COUNT    求组中项数,返回INT类型整数

MAX      求最大值

MIN      求最小值

SUM      返回表达式中所有值的和

AVG      求组中值的平均值

STD或STDDEV返回给定表达式中所有值的标准值

VARIANCE 返回给定表达式中所有值的方差

GROUP_CONCAT返回由属于一组的列值连接组合而成的结果

BIT_AND  逻辑或

BIT_OR   逻辑与

BIT_XOR  逻辑异或

FROM子句与连接表

连接表

1.交叉连接cross join

SELECT * FROM tb1 CROSS JOIN tb2;

或SELECT * FROM tb1,tb2;

2.内连接inner join

3.相等连接equijoin

4.不等连接non-equijoin

5.自连接self-join

6.自然连接natural join

7.外连接outer join

1.左外连接

2.右外连接

WHERE子句

1.比较运算

=

<>         不等于

!=

<

<=

>

>=

<=>        不会返回UNKNOWN

2.字符串匹配

1.百分号

代表任何字符串,并且该字符串可出现任意次数(包括0次)

SELECT cust_id,cust_name FROM mysql_test.customers

WHERE cust_name LIKE '万%';

2.下划线

SELECT cust_id,cust_name FROM mysql_test.customers

WHERE cust_name LIKE '万_';

SELECT cust_address FROM mysql_test.customers

WHERE cust_address LIKE '%#_%' ESCAPE '#'

注意:使用关键字ESCAPE指定一个特殊字符'#',来改变下划线

'_'原有的特殊作用,使其在搜索过程中成为一个普通的字符。

3.文本匹配

1.基本字符匹配

SELECT DISTINCT cust_address FROM mysql_test.customers

WHERE cust_address LIKE '市';

不会出结果

 

SELECT DISTINCT cust_address FROM mysql_test.customers

WHERE cust_address LIKE '%市%';

 

SELECT DISTINCT cust_address FROM mysql_test.customers

WHERE cust_address REGEXP '市';

LIKE与REGEXP区别:LIKE用于匹配整个列,如果被匹配的字符串

在列值中出现,LIKE将不会找到他,相应的行也不会返回,除非

是使用通配符;而REGEXP是在列值内进行匹配,如果被匹配的文本

在列值中出现,REGEXP将会找到它,相应的行也会返回。

2.选择匹配

SELECT DISTINCT cust_address FROM mysql_test.customers

WHERE cust_address REGEXP '北京|武汉|上海';

3.范围匹配

[3-8],[b-g]等

4.特殊字符匹配

5.字符类匹配

6.重复匹配

*                 0或多个

+  1个或多个

?  0或一个

{n}  指定数目

{n,}  不少于指定数目

{n,m}             匹配数目的范围

SELECT cust_name FROM mysql_test.customers

WHERE cust_name REGEXP '[丽]{2}';

7.使用定位符匹配

^                 文本的开始

$  文本的结尾

[[:<:]]           词的开始

[[:>:]]           词的结尾

SELECT * FROM mysql_test.customers

WHERE cust_id REGEXP '^[8-9]';

4.判定范围

1.BETWEEN  AND

SELECT * FROM mysql_test.customers

WHERE cust_id BETWEEN 903 AND 912;

2.IN

SELECT * FROM mysql_test.customers

WHERE cust_id IN(903,906,908);

5.判断空值

SELECT cust_name FROM mysql_test.customers

WHERE cust_contact IS NULL;

6.子查询

1.结合关键字IN使用的子查询

2.结合比较运算符使用的子查询

3.结合关键字EXIST使用的子查询

 

GROUP BY子句与分组数据

SELECT cust_address,cust_sex,COUNT(*) AS '人数'

FROM mysql_test.customers

GROUP BY cust_address,cust_sex;

 

SELECT cust_address,cust_sex,COUNT(*) AS '人数'

FROM mysql_test.customers

GROUP BY cust_address,cust_sex

WITH ROLLUP;

WITH ROLLUP用于指定在结果集中不仅包含由GROUP BY子句分组后

的数据行,还包括各分组的汇总行,以及所有分组的整体汇总行

HAVING子句

HAVING子句与WHERE子句非常相似,但是仍然存在区别,如下:

1.WHERE子句主要用于过滤数据行,HAVING子句主要用于

过滤分组,即HAVING子句可基于分组的聚合值而不是特定行

的值来过滤数据。

2.HAVING子句中的条件可以包含聚合函数,而WHERE子句中则

不可以。

3.WHERE子句会在数据分组前进行过滤,HAVING子句则会在数据分组

后进行过滤。因而,WHERE子句排除的行不包含在分组中,这就有可能

改变计算值,从而影响HAVING子句基于这些值过滤掉的分组。

SELECT cust_name,cust_address

FROM mysql_test.customers

GROUP BY cust_address,cust_name

HAVING COUNT(*)<=3;

ORDER BY子句

SELECT cust_name,cust_sex FROM mysql_test.customers

ORDER BY cust_name DESC,cust_address DESC;

ORDER BY与GROUP BY的区别

ORDER BY                   GROUP BY

排序产生的输出             分组行,但输出可能不是分组的顺序

任意列都可以使用   只可能使用选择列或表达式列

不一定需要   若与聚合函数一起使用列或表达式,则必须使用

LIMIT子句

SELECT cust_id,cust_name FROM mysql_test.customers

ORDER BY cust_id

LIMIT 4,3

(查找从第五位客户开始的三位客户的信息)

SELECT cust_id,cust_name FROM mysql_test.customers

ORDER BY cust_id

LIMIT 3 OFFSET 4;

 

UNION语句与联合查询

SELECT cust_id,cust_name FROM mysql_test.customers

WHERE cust_sex='F'

UNION

SELECT cust_id,cust_name FROM mysql_test.customers

WHERE cust_address='北京市';

 

SELECT cust_id,cust_name FROM mysql_test.customers

WHERE cust_sex='F' OR cust_address='北京市';

区别如下:

1.在有些应用场景中,它们的执行性能会有所不同。

2.UNION ALL是UNION语句中的一种,它可以完成WHERE完成不来的工作。

如果需要每个条件的匹配行在最终的查询结果集中全部出现,并允许包含

重复行,则必须使用UNION ALL而不是WHERE.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关标签: 代码 sql