CREATE DATABASE tong; //创建数据库
DROP DATABASE tong; //删除数据库
USE tong; //选择数据库
创建表
CREATE TABLE `student` (
`stu_id` int(25) NOT NULL AUTO_INCREMENT, //非空主键自增,
`stu_name` varchar(50) default NULL, //默认为空
`stu_age` varchar(10) default NULL,
`stu_sex` varchar(50) default NULL,
`stu_nation` varchar(20) default NULL,
`stu_addr` varchar(50) default NULL,
`stu_birth` date default NULL,
`stu_pwd` varchar(50) default NULL,
PRIMARY KEY (`stu_id`) //设置主键
)ENGINE=InnoDB DEFAULT CHARSET=utf8 auto_increment=100 //使用innodb引擎,默认编码集为utf8 自增初始值为100
SET SESSION auto_increment_increment=5 //设置自增步长为5
SHOW SESSION VARIABLES LIKE 'auto_inc%'; //查看自增初始值和自增步长的值
1.非空约束:NOT NULL,不允许某列的内容为空。
2.设置列的默认值:DEFAULT。
3.唯一约束:UNIQUE,在该表中,该列的内容必须唯一可以为空。
4.主键约束:PRIMARY KEY, 非空且唯一。
5.主键自增长:AUTO_INCREMENT,从1开始,步长为1。
6.外键约束:FOREIGN KEY. A表中的外键列的值必须参照于B表中的某一列(B表主键)
SHOW CREATE TABLE student; //查询表的创建语句
ALTER TABLE `student` MODIFY COLUMN `stu_age` VARCHAR(10); //修改表数据的字段的数据类型
SHOW COLUMNS FROM student FROM tong;//获取student表字段的类型
删除数据
DELETE FROM abc where id=1001; //删除表数据
DROP TABLE abc; //删除表结构
TRUNCATE TABLE table_name; //删除表所有数据,不能与where一起使用
添加数据
INSERT INTO student() VALUES(1001,"tong",21,"男","汉","安徽合肥","2001-11-05",123); //添加数据
修改数据
UPDATE student2 SET stu_id=1005 ,stu_name='tong' WHERE id =2;
查询数据
单表查询
SELECT * FROM student; //查询student表全部数据
注意:先执行from确定从那张表查询,然后执行where字句,最后执行select
SELECT stu_name,stu_age FROM student; //查询student表部分数据
SELECT * FROM student WHERE stu_id = '1001'; //通过ID查询匹配ID的整条数据
SELECT * FROM student WHERE stu_id = '1001' AND stu_age=21; //通过多个条件查询的整条数据
SELECT * FROM student LIMIT 2 ; //设定返回的记录数
SELECT * FROM student LIMIT 2 OFFSET 2; //从第3条数据开始查询2条数据
SELECT stu_name ,(stu_age+3)*3 AS age FROM student;//对年龄进行计算并且起一个别名age,where后面使用别名不行
SELECT * FROM student WHERE stu_age<=100 AND stu_age>=30; //查询年龄在【30,100】之间的学生,也可以SELECT * FROM student WHERE stu_age<=100 && stu_age>=30;
SELECT * FROM student WHERE stu_id=1001 OR stu_id=1002; //查询id为1001或者1002的学生,也可以SELECT * FROM student WHERE stu_id=1001 || stu_id=1002;
SELECT * FROM student WHERE NOT stu_id= 1001; //查询编号不为1001的学生,也可以SELECT * FROM student WHERE stu_id!= 1001;
SELECT * FROM student WHERE stu_name LIKE '%_g%'; //查询student表姓名中包含g的数据且g不是第一个字符
SELECT * FROM student WHERE stu_age BETWEEN 0 AND 100; //选择年龄在0-100之间的学生
IS NULL:判断列的值是否为空。
格式:WHERE 列名 IS NULL;
使用ORDER BY子句将记录排序
ASC : 升序,缺省。
DESC: 降序。
ORDER BY 子句出现在SELECT语句的最后。
格式:
SELECT <selectList>
FROM table_name
WHERE 条件
ORDER BY 列名1 [ASC/DESC],列名2 [ASC/DESC]...;
按照某一列来排序:
需求:选择id,货品名称,分类编号,零售价并且按零售价降序排序
按多列排序:
需求: 选择id,货品名称,分类编号,零售价先按分类编号排序,若分类编号相等,再按零售价排序
Order by a asc,b desc;
列的别名排序:
需求:查询M系列并按照批发价排序(加上别名)
需求:查询分类为2并按照批发价排序(加上别名)
注意:不能对使用了引号的别名排序。
执行顺序:先执行FROM,再执行where,在执行select,最后执行ORDER BY
连表查询
SELECT yuwen FROM fraction WHERE stu_id = (SELECT stu_id FROM student WHERE stu_name='tong') //把从另一张表查出的数据作为条件来查询想要的数据
SELECT * FROM student INNER JOIN fraction ON student.stu_id=fraction.stu_id ; //内连接
SELECT * FROM student RIGHT JOIN fraction ON student.stu_id=fraction.stu_id ; //右连接
SELECT * FROM student LEFT JOIN fraction ON student.stu_id=fraction.stu_id ; //左连接
注释:1、select * from 表1 inner jion 表2 on 表1.字段名=表2.字段名,表示的是通过表1.字段名=表2.字段名来内连接表1和表2,输出表1和表2的交集字段的整条数据
2、如果student表有5个stu_id(1001,1002,1003,1004,1005),fraction表有3条数据(1001,1002,1006),那么通过内连接将会有两条数据显示(1001,1002),通过右连接会有三条数据显示(1001,1002,1006),student表没有的字段将以空或者null填充,通过左连接会有五条数据(1001,1002,1003,1004,1005),fraction表没有的字段将以空或者null填充。
统计函数
Count;sum;max;min;avg…….
SELECT stu.`stu_name` '姓名',SUM(xk.`score`) '总分',MAX(xk.`score`) '最高分', MIN(xk.`score`) '最低分',COUNT(xk.`stu_id`) '选课数' ,AVG(xk.`score`) '平均分' FROM student stu LEFT JOIN xueke xk ON stu.stu_id = xk.`stu_id` WHERE xk.`score`>0 GROUP BY xk.`stu_id`;
分组函数
SELECT (CASE stu_sex
WHEN '1' THEN '男'
ELSE '女'
END) 性别,COUNT(*) FROM student
WHERE stu_sex IS NOT NULL
GROUP BY stu_sex;
注:1、语法 case--when--then--else--end 表示当stu_sex为‘1’的时候让他返回‘男’,其它的返回为‘女’
2、group by 字段名 表示通过这个字段进行分组,相同的为一组