SQL基本语法—小白都能看懂
本篇主要从以下四个方面介绍,主要是比较基础的语法,让每一位学习者都能看懂。
(本文中数据库名为testDemo, 数据表的名字为tb_user)
- DDL(数据库定义语言)
- DML(数据库操纵语言)
- DQL(数据库查询语言)
- DCL(数据库控制语言)
1.DDL(数据库定义语言)
DDL主要是针对创建表时对表结构的定义,使用中主要体现在以下三个关键字上
(注:数据库标准中要求关键字都应大写,为了学习方便,这里进行小写)
①create
create主要用于创建数据库和数据表,基本语法如下
-- 创建数据库
create database if not exists testDemo;
-- 创建数据表
create table if not exists tb_user;
②alter
alter主要实现基于原表结构的基础上进行相应的修改,主要有以下三种用法,以代码的形式展现给大家(A-C)
A. 基于原有的表结构添加新列
-- 语法:alter table tb_user add ...
-- 例子:为原表添加姓名列(user_name)
alter table tb_user
add
user_name varchar(20) not null;
-- 也可以一次添加多列,在为其增加编号(user_id)和年龄(user_age)列
alter table tb_user
add
(
user_id varchar(20) not null,
user_age int(11) not null
);
B.基于原表结构修改已有列属性
-- 将编号列(user_id)的类型改为int型,并取名为user_number
alter table tb_user
change
user_id user_number int(11) not null;
C.删除已存在的列
-- 删除年龄列(user_age)
alter table tb_user
drop
user_age;
③drop 删除表、数据库(直接把表、库空间删了)
-- 删除数据库testDemo
drop database testDemo;
-- 删除数据表tb_user
drop table tb_user;
- DML(数据库操纵语言)
DML主要用来向数据表中增(insert)、删(delete)、改(update)数据,还是以代码的形式展示。
这里先给出一段创建表的代码,指定一些字段,看起来更加直观一点。
create table if not exists tb_user(
user_id varchar(20) primary key,-- 编号,并设置为主键
user_name varchar(25) , -- 姓名
user_age int , -- 年龄,设置非空
user_sex varchar(5) , -- 性别
user_address varchar(255) -- 住址
);
表中给出tb_user表的5个字段
①insert
-- 给指定的字段插入信息,只给编号、姓名、年龄插入信息(插入多行,逗号隔开)
insert into tb_user(user_id,user_name,user_age)
values('1110','张三', 23), (....);
-- 逐行插入数据,按数据表创建的字段顺序插入
insert into tb_user values('1112', '李四', 21,'男','某某省某某市某某区'),(....);
②delete
-- 清空表数据,但是表还在
delete from tb_user;
-- 按条件删除某些行数据,删除年龄大于21的行数据
delete from tb_user where user_age>21;
③update
-- 更新整列的信息,把整张表的姓名列改为‘张伟’
update tb_user set user_name = '张伟';
-- 更新某一行中部分列的数据,把编号为‘1111’的用户姓名更新为‘Mary’,年龄更新为25
update tb_user set user_name='Mary',user_age=25 where user_id='1111';
-- 更新多行数据,把年龄小于20的所有用户姓名更新为‘Tony’
update tb_user set user_name='Tony' where user_age<20;
3.DQL(数据库查询语言)
DQL主要是对数据进行检索,是SQL语句的“灵魂”。
假设现在有另外一张表tb_product(主要为后面多表连接查询做准备),里面的字段有
(product_id, user_id, product_name,product_name)
可见,tb_product表中有一个字段和tb_user是相等的,即user_id。
A.普通查询
-- 查询所有
select * from tb_user;
-- 查询指定字段,按指定查询条件查找相应用户编号和姓名
select user_id, user_name from tb_user where (查询条件)
B.内连接,只返回满足连接条件的数据,即只返回两张表中user_id相等的数据
select * from tb_user
inner join tb_product
on tb_user.user_id=tb_product.user_id;
C.左外连接,除了返回满足连接条件的数据外,还返回左表中不满足连接条件的数据,右表的相应字段补为null,这里的左表相当于是tb_user
select * from tb_user
left join tb_product
on tb_user.user_id=tb_product.user_id;
D.右外连接,除了返回满足连接条件的数据外,还返回右表中不满足连接条件的数据,左表的相应字段补为null,这里的右表相当于是tb_product
select * from tb_user
right join tb_product
on tb_user.user_id=tb_product.user_id;
E.全连接,左外连接和右外连接合并的结果
select * from tb_user
full join tb_product
on tb_user.user_id=tb_product.user_id;
详细DQL查询语句参考MySQL查询指令
4.DCL(数据库控制语言)
DCL主要用于授权管理,详细参考上一篇(Navicat Premium远程连接MySQL数据库)
注:多表连接查询还要会区分驱动表和被驱动表,这对于SQL检索性能很重要,有兴趣大家可以交流学习。