1.增
1.创建一个名为text的数据库,注意``符号是键盘左上角Esc键下方的符号,而不是逗号。(使用SQLyog创建列表的话,记得刷新列表!!!)
格式:create database 数据库名
CREATE DATABASE `text`
2.创建表格
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(6) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(10) NOT NULL DEFAULT '佚名' COMMENT '名字',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
PRIMARY KEY(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8
NOT NULL 表示所填这个元素的内容不能为空
DEFAULT 表示这个元素的默认值
COMMENT 表明这个元素需要填写的值,提示
PRIMARY KEY(id) 将id元素设为主键,一般一个表只有唯一一个主键
ENGINE=INNODB DEFAULT CHARSET=utf8 设置引擎为INNODB ,文档格式为UTF-8
IF NOT EXISTS 判断是否存在
主键的作用:数据库的主键指的是一个列或多个列组合,其值能唯一标注表中的每一行。主键可以用来表示一个精确定位的特定行,如果没有主键,无法精准定位一条记录是否就是你要的相关行记录,这样就会导致更新或者删除表中特定的行很困难。如果有主键来约束行记录的唯一性后,就可以用主键来解决问题。
引擎的作用:存储引擎是服务于存储服务的,通过存储引擎将数据保存。就跟计算机如何将数据保存到磁盘中一样,在数据库中,存储引擎的意思就是通过何种引擎将数据存储在磁盘中。
3.向表中插入语句
格式:insert into 表名
(字段一
,字段二
,...) values('值1','值二',...),('值1','值二',...)
注意:数据与字段之间一定要对应。
INSERT INTO `student`(`id`,`name`)VALUES('001','张三'),('002','李四'),('003','王五')
2.删
1.删除表中字段
格式:ALTER TABLE 表名 DROP 字段名
ALTER TABLE student DROP age
2.删除数据
格式:DELETE FROM 表名
TRUNCATE TABLE 表名
DELETE FROM `student`
TRUNCATE TABLE `student`
3.改
1.修改表
格式:ALTER TABLE 数据库名 MODIFY 表名 列属性
格式:ALTER TABLE 数据库名 CHANGE 旧表名 新表名 列属性
ALTER TABLE student MODIFY sex VARCHAR(10)
ALTER TABLE student CHANGE sex age INT(10)
2.修改表中字段对应的值
格式:update 表名 set 想修改的字段名='新值' where 约束条件
UPDATE `student` SET `name`='小张' WHERE id=1
注:约束条件是必要的,如若不加上约束条件,那么整张表指定的字段值都将会被修改,如若有多个约束条件可以用and和or连接
4.查(重点)
1.基础查询
select语句
--显示出student表中的所有信息--
SELECT * FROM student
--只显示出student表中部分信息--
SELECT `studentno`,`loginpwd`,`address`,`borndate` FROM student
一般情况下,我们为了表格中信息更易理解。通常会在select语句中为提取出的字段取别名。用as关键词即可,as可以省略,中间为空格。
SELECT `studentno` 学号,`loginpwd` 密码,`address` 家庭地址,`borndate` 出生日期 FROM student
与CONCAT连接字符串函数联用:
使用方法:
SELECT CONCAT('学号:',`studentno`) 学号,`loginpwd` 密码,`address` 家庭地址,`borndate` 出生日期 FROM student
去重:(去除重复数据)
关键词:DISTINCT
--过滤掉学时相同的科目---
SELECT DISTINCT `classhour` FROM SUBJECT
2.模糊查询:
1.关键词:like
--查询名字为两个字的姓李的人--
SELECT studentname FROM student WHERE studentname LIKE '李_'
--查询名字为三个字的姓练的人--
SELECT studentname FROM student WHERE studentname LIKE '练__'
--查询名字中带“娜”字的人--
SELECT studentname FROM student WHERE studentname LIKE '%娜%'
注:一个下划线"_"代表一个字符,而一个"%"代表不确定数量的字符。
2.关键词:in
--查询地址在“北京朝阳”的学生--
SELECT studentname,sex FROM student WHERE address IN('北京朝阳')
注:in 后面只能跟具体的值,而不能是模糊的值!也就是说,它与like不同,不能查询一定范围的值,而是只能是特定的值,否者结果与预期相悖。
3.关键词:is null (is not null)
--查询没有生日的同学--
SELECT studentname,sex FROM student WHERE borndate IS NULL
--查询有生日的同学--
SELECT studentname,sex, borndate FROM student WHERE borndate IS NOT NULL
4.关键词:between
--查询学号在1000到1004之间的学生,包括1000和1004--
SELECT studentname,sex, borndate FROM student WHERE studentno BETWEEN 1000 AND 1004
3.联表查询:
首先简单介绍一下,数据库中的笛卡尔乘积: 笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合,上图中两个表连接即为笛卡尔积(交叉连接)
inner join:
SELECT s.studentno,studentname,sex,subjectno,studentresult
FROM student s
INNER JOIN result r
WHERE s.studentno=r.studentno
注:都是取两者的交集部分,其余两者独有的部分被过滤掉。
left join:
SELECT s.studentno,studentname,sex,subjectno,studentresult
FROM student s
LEFT JOIN result r
ON s.studentno=r.studentno
注:取左表(此处为student)中的全部元素,过滤掉右表的独有元素。
right join:
SELECT s.studentno,studentname,sex,studentresult
FROM result r
RIGHT JOIN student s
ON s.studentno=r.studentno
注:取右表(此处为student)中的全部元素,过滤掉左表的独有元素。