mysql数据库学习

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 字段名    表示通过这个字段进行分组,相同的为一组

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值