最近笔者在学习数据库的相关知识,但是最基础的SQL语句还是要好好总结一下的。本文主要是记录SQL语句的相关知识。
一、SQL语句分类
1、DDL (数据定义语句)–数据定义语言 - Data Definition Language
–用来定义数据库的对象,如数据表、视图、索引等
2、DML (数据操纵语句)–数据处理语言 - Data Manipulation Language
–在数据库表中更新,增加和删除记录
–如 update, insert, delete --- 增删改
3、DCL (数据控制语句)–数据控制语言 – Data Control Language
–指用于设置用户权限和控制事务语句
–如grant,revoke,if…else,while,begin transaction
4、DQL (数据查询语句)–数据查询语言 – Data Query Language
–select
二、SQL语句
1.创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name
- •CHARACTER SET:指定数据库采用的字符集
- •COLLATE:指定数据库字符集的比较方式
create database xiangzaixiansheng
#指定数据库的字符集为utf-8
create database xiangzaixiansheng character set utf8;
2.查看、删除数据库
显示数据库语句:
SHOW DATABASES
显示数据库创建语句:
SHOW CREATE DATABASE db_name
数据库删除语句:
DROP DATABASE [IF EXISTS] db_name
4.创建表(基本语句)
CREATE TABLE table_name
(
field1 datatype,
field2 datatype,
field3 datatype
)character set 字符集 collate 校对规则
field:指定列名 datatype:指定列类型
注意:
1.表名、字段名称必须使用小写字母或者数字,禁止出现数字开头。
2.如果存储的字符串的长度几乎相等,则使用char定长字符串类型。
3.varchar是可变长度的字符串,不预先分配存储空间,长度不要超过5000.如果长度他与此数值,这定义字段为text类型。独立一张表出来,用主键来对应,避免影响其他字段的引用效率。
修改某一个键为主键:
ALTER TABLE table_name DROP PRIMARY KEY (id)
说明:把主键的定义删除。
ALTER TABLE table_name ADD PRIMARY KEY (no)
说明:更改表得的定义把no设为主键。
5.插入数据
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
注意:字符和日期型数据应包含在单引号中。在values中列出的数据位置必须与被加入的列的排列位置相对应。
insert into student (sid,name,sex,age) values(1,'xiangzaixiansheng',1,23);
insert into student values(1,'xiangzaixiansheng',1,23);
6.删除数据
delete from tbl_name [WHERE where_definition]
如果不使用where子句,将删除表中所有数据。
使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。
7.更新数据
UPDATE tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]
update student set age=28 where id=1;
8.查询数据
SELECT [DISTINCT] *|{column1, column2. column3..} FROM table;
- select 指定查询哪些列的数据。
- column指定列名。
- *号代表查询所有列。
- from指定查询哪张表。
- DISTINCT可选,指显示结果时,是否剔除重复数据
SELECT column as 别名 from 表名;
例子:
表别名 select p.name,p.price from product as p;
列别名 select name as 商品名字, price as 商品价格 from product;
select name 商品名字, price 商品价格 from product;
去除重复值 select distinct price from product;
select运算:
条件查询: select * from product where price <35 or price >500;
like模糊查询:select * from product where name like '%饼%'; 查询名字中带饼的
select * from product where name like '_熊'; 查询第二个字是熊的所有商品
in 在某个范围获取值 select * from product where price in (20,30,45); 查询出商品价格在20 30 45 里面的商品
排序操作查询:
SELECT column1, column2. column3..FROM table order by column asc|desc
- Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。
- Asc 升序、Desc 降序
- ORDER BY 子句应位于SELECT语句的结尾。
例:select * from product order by price desc; 按照商品价格降序排列
聚集函数查询: where后面不能添加聚合函数
Select count(*)|count(列名) from tablename[WHERE where_definition]
Select sum(列名){,sum(列名)…} from tablename[WHERE where_definition]
Select max(列名) from tablename [WHERE where_definition]
例:select sum(price) from product;查询所有价格的总和。
select * from product where price >(select avg(price) from product);查询商品价格大于平均价格的所有商品。
分组查询
SELECT column1, column2. column3.. FROM table group by column having ...
Having和where均可实现过滤,但在having可以使用聚集函数,having通常跟在group by后,它作用于分组
三、总结
编写顺序
select ...... from .........where .........group by.......... having ........order by.............
执行顺序
from .... where .... group by ..... having.....select ....order by ............