1.SQL语句分类
*DQL:Data Query Language数据查询语言 关键字:select
*DML:Data Manipulation Language数据操作语言
*DDL:Data Definition Language数据定义语言 关键字: create、alter、drop
DCL:数据控制语言
TPL:事务处理语言
CCL:指针控制语言
1.1. DDL 语句
作用: 用于描述数据库中存储现实世界中实体的语言即创建数据库和表结构(不仅仅能创建数据库和表结构,今天只学创建数据库和表结构)。
常用关键字:
CREATE、ALTER、DROP
1.1.1.创建数据库语法
1.创建数据库:
CREATE DATABASE db_name(数据库名称)[character set charset_name(字符集编码)]
注:
(1).中括号[] 表示 可以不用写。
(2).character set charset_name 指定默认的字符集 (安装数据库时指定的是UTF-8)。注 mysql数据库使用的是UTF8 不是 UTF-8
(3).mysql支持的字符集: (查看字符集和默认排序:)
1.MySql语句
(1).显示所有的数据库 : SHOW DATABASES;
(2). 创建 mydb1数据库: CREATE DATABASE mydb1;
(3).显示mydb1创建细节(包含使用的字符集) SHOW CREATE DATABASE mydb1;
(4) .创建字符集为gbk 的mydb2数据库 create database mydb2 character set gbk; 或者create database mydb2 charset=gbk;
(5). 修改数据库mydb2 字符集为utf8; alter database mydb2 character set utf8;
注:只适合在数据库没有内容的情况下修改,因为如果有数据会乱码。
(6). 删除 mydb3 数据库 drop database mydb3;
1.1.2.MySql数据类型 常用
1 int : id int 插入的样式:id=1
2 float : height float(5,2) 5是数据最大长度,2是小数点后最大位数 插入的样式为:height='312' 输出时会自动补齐成 312.00
3 char : tel char(11) :固定最大长度11 插入的样式为:tel='12345678901' :(多一位就错)
4 varchar : name varchar(20): 可变长度,长度为20 插入的样式为:name=‘yuanzhen’ :(随便多少位)
5 date : birthday date 插入的样式为:yyyy-mm-dd 插入的样式为:birthday='1999-09-09'
1.1.3.创建表
create table employee(
id int,
name varchar(100),
gender varchar(10),
birthday date,
salary float(8,2),
);
1.1.4.修改表
ALTER TABLE tbl_name [add | modify | change | drop |rename to | ...]
(1)、在employee 上增加job 列。 alter table employee add job varchar(100);
(2)、修改 job列 使其长度为60。 alter table employee modify job char(60);
(3)、将列名 job 修改成 jobs; alter table employee change job jobs varchar(100);
(4)、删除jobs列 alter table employee drop jobs;
(5)、修改表的字符集为utf8; alter table employecharacter set utf8; 或者alter table employee charset=utf8;
(6)、将表名改成user; alter table employee rename to user; 或者 rename table user to employee;
(7)、删除employee 表格 drop table employee;
(8)、删除数据库 drop database day01_test01;
1.2 DML语句
向数据库表中插入、修改、删除数据。
常用关键字 insert、update、delete。
1. insert 语句
语法: INSERT INTO tb_name[(col_name,...)] VALUES(值1,值2,...);
(1). 第一种写法:字段全写 insert intoemployee(id,name,gender,birthday,entry_date,job,salary,resume)values(1,’zs’,’female’,’2017-12-12’,’2016-12-11’,’eco’,1111.21,’eco’);
注: 字符串和日期用单引号
(2).第二种写法: 字段全不行 值必须全写,并且一一对应Insert into employee values(2,’ls’,’male’,’2011-11-11’,’2012-11-11’,’cto’,2121.21,’cto’,);
(3).第三种写法: 只写部分字段 insert into employee(id,username,gender) values(3,'ww','female');
注: 没有值的字段默认为null;
2.update 语句
对于单个表的语法:UPDATE tbl_name SET col_name1=expr1 [, col_name2=expr2 ...][WHERE where_definition][ORDER BY ...][LIMIT row_count]
1. 将所有员工薪水修改为5000元 Update employee set salary=5000;
2. 将姓名为’zs’的员工薪水修改为3000元。 Update employee set salary=3000 where username=’zs’;
3. 将姓名为’lisi’的员工薪水修改为4000元,job改为ccc。 Update employee set salary=4000,gender=’woman’ where username=’lisi’;
4. 将ww的薪水在原有基础上增加1000元。 Update employee set salary=salary+1000 where username=’ww’;
3.delete 语句
单表语法:DELETE FROM tbl_name[WHERE where_definition] [ORDER BY ...] [LIMIT row_count]
1. 删除表中名称为’zs’的记录。 Delete from employee where username=’zs’;
2. 删除表中所有记录。 Delete from employee;(一条一条的删除)
3. 使用truncate删除表中记录 Truncate table employee;(摧毁整张表格,重新建立表结构,效率高)
注:(delete 是一条一条的删除语句,而truncate 删除整个表格...)
1.3 DQL语句
语法:
SELECT col_name1,col_name2... FROM tb_name [WHERE where_definition]
1. Select语句(1)
Select [DISTINCT] * |{column1、columnl2、columnl3…} FROM table;
注:DISTINCT : 显示结果时,是否去除重复列 * : 表示 所有的列;
创建一张学生成绩表,有id、name、chinese、english、math 字段。
(1) 、查询表中所有学生的信息 SELECT * FROM student;
(2)、查询表中所有学生的姓名和对应的英语成绩。 SELECT name,english FROM student;
(3)、过滤表中重复math 成绩。 SELECT DISTINCT math FROM student;
2. Select 语句(2) # 原表数据不会改变。
select *|{column1|expression、column2|expression,…}from table;
select column as 别名 from table;
注: expression : mysql支持表达式 加减乘除;// as: 表示给某一列起别名;并且as 可以省略;
(1).在所有学生数学分数上加10分特长分。 SELECT name,math+10 FROM student;
(2).统计每个学生的总分。 SELECT name,chinese+english+math FROM student;
(3).使用别名表示学生分数 SELECT name AS 姓名,chinese+english+math 总分 FROM student;
3. Select 语句(3)
(1).查询姓名为王五的学生成绩 SELECT * FROM student WHERE name='王五';
(2).查询英语成绩大于90分的同学 SELECT * FROM student WHERE english>90;
(3).查询总分大于200分的所有同学 SELECT * FROM student WHERE (chinese+english+math)>200;
4 Select 语句(4)
注: 逻辑运算符优先级 not and or;
(1).查询英语分数在 70-75之间的同学。 SELECT * FROM student WHERE english BETWEEN 70 AND 75;
(2).查询数学分数为80,81,82的同学。 SELECT * FROM student WHERE math IN (89,90,91);
(3).查询所有姓李的学生成绩。 SELECT * FROM student WHERE name LIKE 'l%';
(4).查询数学分>80并且语文分>80的同学。 SELECT * FROM student WHERE math>80 AND chinese>80;
5 Select 语句(5)
使用order by 子句对结果集进行排序
语法:Select column1,column2,… from table order by column asc|desc;
注:Order by column : 对那一列进行排序//Asc: 升序(默认), Desc: 降序
(1).对数学成绩排序后输出。 SELECT name,math FROM student ORDER by math;
(2).对总分排序后输出,然后再按从高到低的顺序输出 SELECT name AS 姓名,chinese+english+math 总分 FROM student ORDER BY 总分 DESC;
(3).对姓l的学生成绩排序输出 SELECT * FROM student WHERE name LIKE 'l%' ORDER BY chinese;
6 Select 语句(6)
语法:SELECT col_name1,col_name2... FROM tb_name LIMIT {[offset,] row_count | row_count OFFSET offset}
(1)、显示student 表格中的前3行。 Select * from student limit 3;
注: 3 表示 显示前3行。
(2)、显示 student 表格中的第3~5行。 Select * from student limit 2,3;
注: 2表示偏移几行,3表示显示的总行数。