SQL语句实例说明 方便学习mysql的朋友


本文整理自网络,侵删。

MySQL中模式就是数据库

SHOW DATABASES;

show databases;
罗列所有数据库名称

CREATE DATABASE <数据库名>

create database TEST;
创建名为TEST的数据库

DROP DATABASE <数据库名>

drop database TEST;
删除名为TEST的数据库

USE <数据库名>

use TEST;
使用名为TEST的数据库

SHOW TABLES

show tables;
显示当前数据库所有表格

SHOW [FULL] COLUMNS FROM <表名>

show [full] columns from <表名>
在MySQL数据库中显示表的结构,如果加上full则更加详细

DESC <表名>

desc TEST;
查看表TEST的结构,同show columns from TEST

SHOW CREATE TABLE <表名>

show create table TEST;

查看表TEST的所有信息,包括建表语句

创建基本表:
CREATE TABLE <表名>
(<列名> <数据类型>[列级完整性约束条件],
<列名> <数据类型>[列级完整性约束条件],
………………
);

create table STUDENT
(
studentId int(30) primary key,
name varchar(255),
address varchar(255)
);
创建名为STUDENT的表格,有属性studentId,name,address,其中studentId为主键

create table TEACHER
(
teacherId int(30),
name varchar(255),
age int(20),
studentId int(30),
primary key (teacherId),
foreign key (studentId) references STUDENT(studentId)
);
创建名为TEACHER的表格,其中teacherId为主键,studentId为外键,引用STUDENT表的主键studentId

修改基本表:

ALTER TABLE <表名> RENAME <修改后表名>

alter table TEACHER rename S;
将TEACHER表的表名改为S

ALTER TABLE <表名> ADD COLUMN <列名> <属性类型>

alter table TEACHER add column ADDRESS varchar(255);
在表名为TEACHER的表中加入名为ADDRESS的列

ALTER TABLE <表名> CHANGE COLUMN <列名> <修改后列名> <属性类型>

alter table TEACHER change column ADDRESS address varchar(230);
修改TEACHER表中的列,将ADDRESS的列名改为address

ALTER TABLE <表名> DROP [COLUMN] <列名>

alter table TEACHER drop [column] address;
删除列名为address的列,column可有可无

删除基本表:

DROP TABLE <表名> [RESTRICT|CASCADE]
删除表格


drop table STUDENT restrict;
删除STUDENT表。受限制的删除,欲删除的基本表不能被其他表的约束所引用(如check,foreign key等约束),
不能有视图,不能有触发器,不能有存储过程或函数等。

drop table STUDENT cascade;

若选择cascade,则该表删除没有限制。在删除基本表的同时,相关的依赖对象,例如视图,都将被一起删除。

但是我在MySQL测试的时候给错误提示Cannot delete or update a parent row: a foreign key constraint fails,不予以删除,不知道是什么原因。

关于完整约束性:

 参考文章:完整性约束的SQL定义

ALTER TABLE <表名> ADD CONSTRAINT <约束名> <约束条件>

 alter table teacher add constraint pk_teacher_id primary key teacher(id);

 在teacher表中增加名为pk_teacher_id的主键约束。

ALTER TABLE <表名> DROP <约束条件>

alter table teacher drop primary key;

删除teacher表的主键约束。

alter table student add constraint fk_student_teacher foreign key student(teacherId) references teacher(id);

在student表中增加名为fk_student_teacher的约束条件,约束条件为外键约束。

索引的建立与删除:

索引的建立:

CREATE [UNIQUE]|[CLUSTER] INDEX <索引名> ON <表名>(<列名> [次序][,<列名> [次序]]……);

UNIQUE 表明此索引的每一个索引值只对应唯一的数据记录。

CLUSTER 表示要建立的索引是聚簇索引。

create unique index id_index on teacher(id asc);
对teacher表的id列建立unique索引,索引名为id_index

索引的删除:

DROP INDEX <索引名> ON <表名>

drop index id_index on teacher;
在teacher表中删除索引,索引名为id_index

另外的方法:

新建索引:

ALTER TABLE <表名> ADD [UNIQUE]|[CLUSTER] INDEX [<索引名>](<列名> [<次序>],[<列名> [<次序>]]……)

alter table teacher add unique index id_index(id asc);
在teacher表中对id列升序建立unique索引,索引的名字为id_index

删除索引:

ALTER TABLE <表名> DROP INDEX <索引名>

alter table teacher drop index id_index;
删除teacher表名为id_index的索引

数据库索引的建立有利也有弊,参考文章:

数据库索引的作用和优点缺点(一)

数据库索引的作用和优点缺点(二)

数据库建立索引的原则

数据查询:

SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>]……

FROM <表名或视图名> [<表名或视图名>]……

[WHERE <条件表达式>]

[GROUP BY <列名1> [HAVING <条件表达式>]]

[ORDER BY <列名2> [ASC|DESC] [,<列名3> [ASC|DESC]]……];

查询经过计算的值:

select teacherId as id,salary - 100 as S from teacher;

查询经过计算的值,从teacher表中查询出teacherId字段,别名为id,并且查询出salary字段减去100后的字段,别名为S

 

使用函数和字符串:

select teacherid as id,'birth',salary - 20 as SA, lower(name) from teacher;

<目标表达式>可以是字符串常量和函数等,'birth' 为字符串常量,lower(name)为函数,将name字段以小写字母形式输出

 

消除取值重复的行:

select distinct name from teacher;

如果没有指定DISTINCT关键词,则缺省为ALL.

 

查询满足条件的元组:

WHERE子句常用的查询条件:

查询条件

谓词

比较

=, >, <, >=, <=, !=, <>, !>, !<

确定范围

BETWEEN AND, NOT BETWEEN AND

确定集合

IN, NOT IN

字符匹配

LIKE, NOT LIKE

空值

IS NULL, IS NOT NULL

多重条件(逻辑运算)

AND, OR, NOT

 


(1)比较大小:

select * from teacher where name = 'test';

select * from teacher where salary > 500;

select * from teacher where salary <> 500;

(2)确定范围:

select * from teacher where salary between 300 and 1000;

select * from teacher where salary not between 500 and 1000

(3)确定集合

select * from teacher where name in('test','test2');

select * from teacher where name not in('test','test2');

(4)字符匹配:

[NOT] LIKE '<匹配串>' [ESCAPE '<换码字符>']
<匹配串>可以是一个完整的字符串,也可以含有通配符%和_
%代表任意长度(长度可以是0)的字符。例如a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab

_代表任意单个字符。例如a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串。

select * from teacher where name like '%2%‘;

select * from teacher where name like '_e%d';

注意一个汉字要占两个字符的位置。

(5)涉及空值查询:

select * from teacher where name is null;

select * from teacher where name is not null;

注意这里的"is"不能用符号(=)代替。

(6)多重条件查询:

select * from teacher where name = 'test' and salary between 400 and 800;

select * from teacher where name like '%s%' or salary = 500;

 

ORDER BY子句:

ORDER BY 子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,缺省值为(ASC)

select salary from teacher order by salary asc;

select * from teacher order by name desc,salary asc;


聚集函数(aggregate functions):

COUNT([DISTINCT|ALL]*)                 统计元组个数
COUNT([DISTINCT|ALL]<列名>)       统计一列值的个数
SUM([DISTINCT|ALL]<列名>)            计算一列值的总和
AVG([DISTINCT|ALL]<列名>)             计算一列值的平均值
MAX([DISTINCT|ALL]<列名>)             求一列值中的最大值
MIN([DISTINCT|ALL]<列名>)         求一列值中的最小值

缺省值为ALL

select count(distinct name) from teacher;
查询没有重复的名字的个数

select count(*) from teacher;
查询teacher表格总记录数

select sum(salary) from teacher;
查询teacher表的salary字段的总和

select avg(salary) from teacher;
查询teacher表的salary字段的平均值

select max(salary) from teacher;
查询teacher表的salary字段的最大值

select min(salary) from teacher;
查询teacher表的salary字段的最小值

阅读剩余部分

相关阅读 >>

如何理解mysql数据库的优化

mysql中#{}和${}的区别详解

mysql5.7.14下载安装图文教程及mysql数据库语句入门大全

mysql的增删查改语句用法示例总结

mysql服务如何开启?

mysqld是什么?

redhat下mysql的基本使用方法分享

mysql分区表的基本入门教程

如何查看mysql的默认存储引擎

mysql版本号怎么查看

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...