数据库存储是表格如下:
姓名 | 年龄 | 学号 |
---|---|---|
张三 | 20 | 10010 |
李四 | 22 | 10011 |
王二 | 21 | 10012 |
字段:姓名,年龄,学号表示字段
记录:一行完整的具体内容是记录
SQL语句(结构化查询语言)
- DDL 数据定义语言
- DML 数据操作语言
- DCL 数据控制语言
一、DDL
主要提供数据库和表的创建,删除和修改
1.创建数据库
-- 1.创建数据库:
CREATE DATABASE school;
-- 如果指定数据库不存在的时候创建数据库
CREATE DATABASE school IF NOT EXISTS;
-- 创建数据库的时候设置字符集编码方式为utf8,让数据库支持中文数据的存储
create database if not EXISTS school default charset utf8;
2.使用/切换数据库: use 数据库名
use school;
3.删除数据库
-- 删除数据库
DROP DATABASE school;
-- 如果指定的数据库名存在则删除数据库
DROP DATABASE IF EXISTS school2;
4.创建表
CREATE TABLE IF not EXISTS t_student(
stuid int not null auto_increment,
stuname varchar(20) not null,
gender bit DEFAULT 1,
birth date,
PRIMARY KEY(stuid)
-- 设置stuid为当前主键,设置一个字段为主键其实是间接的约束这个字段的值是唯一的
);
5.删除表
DROP TABLE if EXISTS 表名;
DROP TABLE if EXISTS t_student;
-- 清空表中的数据: 记录清空字段还在
TRUNCATE TABLE t_student;
6.修改表
6.1添加列
添加列: alter TABLE 表名 add COLUMN 字段名 字段类型 约束;
alter TABLE t_student add COLUMN score FLOAT(8,2) DEFAULT 0;
6.2删除列
删除列: alter TABLE 表名 drop COLUMN 字段名;
alter TABLE t_student drop COLUMN gender;
数据类型
数据类型 | 说明 |
---|---|
char(size) | 定长字符串 |
varchar(size) | 不定长字符串 |
int | 整数 |
bit | 布尔(0或1) |
float(size, d) | 浮点数(d保留几位小数) |
添加约束
约束语法 | 说明 |
---|---|
not null | 不能为空 |
default | 默认值 |
unique | 唯一 |
primary key | 主键 |
auto_increment | 自动增长(只对主键有效并且是int) |
注意:主键指定是一张表能够唯一标识一条记录的字段(通过主键值能够找到表中唯一一条记录)
二、DML(数据操作语言)
主要针对数据库中数据的增、删、改、查。
1、增(添加数据/记录):
1.1 插入数据/记录:
insert into 表名 (value1, value2, value3...)
依次给表中的字段赋值
INSERT INTO t_student VALUES(1, 'zhangsan', 0, '2011-1-2');
1.2插入数据/记录:
insert into 表名(字段名1,字段名2,...) values (值1, 值2...)
INSERT INTO t_student(stuname, birth) VALUES('allen', '1999-2-3');
值的问题:sql中是数字对应的值直接写,字符串需要使用引号引起来,bit类型的值只有0和1,
时间可以用内容是满足时间格式字符串也可以是通过时间函数获取的值
时间函数: now() - 当前时间 year(now()) - 当前年 month(now()) - 当前月 month(now()) - 当前月
date(now()) - 获取当前日期
一次插入多条数据
INSERT into t_student(stuname, birth) VALUES
("小花", date(now())),
('小明', '2018-9-8'),
('路飞', '1999-12-16'),
('佐助', '2000-10-12');
2、删(删除数据/记录)
delete from 表名; - 删除指定表中所有的记录
DELETE FROM t_student;
delete from 表名 where 条件语句; - 删除满足条件的记录
注意:实际开发中不会删除数据记录,只会做标记不可见,而不是真正的删除。
DELETE FROM t_student WHERE stuid = 6
DELETE FROM t_student WHERE stuname = 'zhangsan'
DELETE FROM t_student WHERE stuid<5 -- 删除学号小于5的所有数据
SQL中的判断语句使用的符号:
符号 | 说明 |
---|---|
= | 判断是否相等 |
<> | 不等于 |
> | 大于 |
< | 小于 |
% | 通配符(任意个数的任意字符) |
_ | 表示一个任意字符(对字符串有效) |
3.改(修改数据/ 记录)
update 表名 set 字段1=新值1, 字段2=新值2...; - 将指定表中所有行的指定列/字段的值赋值为新值
update 表名 set 字段1=新值1, 字段2=新值2... where 条件语句; - 将指定表中满足条件的行的的值赋值为新值
UPDATE t_student SET birth='1990-01-01'; -- 所有记录出生日期都改了
UPDATE t_student SET stuname='李勇' WHERE stuname='王二'; -- 改名字,王二改成李勇
UPDATE t_student SET birth='1995-1-1' WHERE stuname LIKE '___'; -- 更改名字是三个字的出生日期
注意: 通配符只针对字符串有效!
4.查(获取数据)
4.1直接查询
select * from 表名; -- 获取指定表中所有的行和所有的列
SELECT * FROM t_student; -- 获取学生表的所有数据
select 字段名1,字段名2,... from 表名; - 获取指定表中所有行指定的列
SELECT stuname,stuid FROM t_student;
select * from 表名 where 条件; - 获取指定表满足条件的行所有数据
SELECT * FROM t_student WHERE stuname LIKE '李%';
4.2列重命名
select 字段1 as 新字段1, 字段2 as 新字段2, ... from 表名
SELECT stuid as '学号', stuname, gender as '性别' FROM t_student;
4.3对查询结果重新赋值(一般对布尔数据)
select if(字段相关的条件语句, 值1, 值2) from 表名;
查询指定字段,并且判断字段对应的值是0还是1,如果是1结果为值1,否则为值2
注意:这儿的if是MySQL专有的语法
-- MySQL 写法
SELECT stuname, if(gender,'男','女') as gender FROM t_student;
-- 通用写法
SELECT CASE '性别'
WHEN 1 THEN
'男'
ELSE
'女'
END FROM t_student;
4.4对列进行合并
select concat(字段1,字段2...) from 表名;
SELECT CONCAT(stuname,':', stuid) as 'name_id' FROM t_student;
注意:数字和字符串数据可以合并,bit类型的数据不可以合并。
4.5模糊查询
查询的时候通过like条件来指定查询对象
SELECT * FROM t_student WHERE stuname LIKE '李%' and gender = 1; -- 同时满足两个条件的查询
4.6排序(先按之前的任何语法进行查询再排序)
select * from 表名 order by 字段; - 对查询结果按照指定字段的值按照升序排序(默认是升序排序)
select * from 表名 order by 字段 DESC; - 对查询结果按照指定字段的值按照降序排序
SELECT * FROM t_student ORDER BY birth; -- 升序排序
SELECT * FROM t_student ORDER BY birth DESC; -- 降序排序
SELECT * FROM t_student ORDER BY gender ASC, stuid DESC; -- 先按性别升序排序,然后再学号降序排序,写在前面的优先级越高
4.7限制
select * from 表名 limit N; -- 获取查询结果的前N条记录
select * from 表名 limit N offset M; -- 获取查询结果跳过前M条取N条记录
SELECT * FROM t_student LIMIT 3; -- 获取查询结果的前3条
SELECT * FROM t_student LIMIT 3 offset 4; -- 跳过前4数据,然后取3条数据
网友评论