Mysq sql语句教程
mysql管理命令
show databases; 显示服务器上当前所有的数据库
use 数据库名称; 进入指定的数据库
show tables; 显示当前数据库中所有的数据表
desc 表名称; 描述表中都有哪些列(表头)
quit; 退出服务器的连接
常用的SQL命令
(1)丢弃指定的数据库,如果存在的话
DROP DATABASE IF EXISTS jd;
(2)创建新的数据库
CREATE DATABASE jd;
(3)进入创建的数据库
USE jd;
(4)创建保存数据的表
CREATE TABLE student(
sid INT,
name VARCHAR(8),
sex VARCHAR(1),
score INT
);
(5)插入数据
INSERT INTO student VALUES('1','scott','m','87');
(6)查询数据
SELECT * FROM student;
(7)删除数据
DELETE FROM student WHERE sid='3';
(8)修改数据
UPDATE student SET name='guo',score='89' WHERE sid='4';
标准SQL语句分类
DDL: Data Define Language 定义数据结构
CREATE/DROP/ALTER
DML: Data Manipulate Language 操作数据
INSERT/DELETE/UPDATE
DQL: Data Query Language 查询数据
SELECT
DCL: Data Control Language 控制用户权限
GRANT(授权)/REVOKE(收权)
解决mysql存储中文乱码
脚本文件另存为的编码
客户端连接服务器端的编码(set names utf8)
服务器端在创建数据库时的编码(chaset=utf8)
mysql中的列类型
创建数据表的时候,指定的列可以存储的数据类型
CREATE TABLE t1( nid 列类型 );
(1)数值型 —— 引号可加可不加
TINYINT 微整型,占1个字节,范围-128~127
SMALLINT 小整型,占2个字节,范围-32768~32767
INT 整型,占4个字节,范围-2147483648~2147483647
BIGINT 大整型,占8个字节
FLOAT 单精度浮点型,占4个字节,最多3.4e38,可能产生计算误差
DOUBLE 双精度浮点型,占8个字节,范围比BIGINT大的多
DECIMAL(M,D) 定点小数,不会产生计算误差,M代表总的有效位数,D小数点后的有效位数
BOOL 布尔型,只有两个值TRUE/1、FALSE/0,TRUE和FALSE不能加引号;在存储的时候使用TINYINT类型,具体的值是1和0
(2)日期时间型 —— 必须加引号
DATE 日期型 '2019-10-31'
TIME 时间型 '14:26:30'
DATETIME 日期时间型 '2019-10-31 14:26:30'
(3)字符串型 —— 必须加引号
VARCHAR(M) 变长字符串,不会产生空间浪费,操作速度相对慢,M最大是65535
CHAR(M) 定长字符串,可能产生空间浪费,操作速度相对的快,M最大值是255,常用于存储手机号,身份证号等一些固定长度的字符串
TEXT(M) 大型变长字符串,M最大是2G
列约束
mysql可以对要插入的数据进行特定的验证,只有满足条件才允许插入到数据表中,否则被认为非法的插入
例如:一个人的性别只能是男或者女,一个人成绩0~100
CREATE TABLE t1( id 列类型 列约束 );
(1)主键约束——PRIMARY KEY
声明了主键约束的列上的值不能出现重复,一个表中只能有一个主键,通常加在编号列;表中查询的记录会按照主键从小到大的顺序排列——加快查找速度。
声明了主键约束后就不能在插入NULL值
(2)非空约束 —— NOT NULL
声明了非空约束的列上不允许插入NULL值
(3)唯一约束——UNIQUE
声明了唯一约束的列上不允许插入重复的值,允许插入NULL,甚至多个NULL ps:NULL和任何值比较都不等,包括两个NULL比较
(4)检查约束——CHECK
检查约束可以对插入的数据进行自定义验证
CREATE TABLE student(
score TINYINT CHECK(score>=0 AND score<=100)
);
mysql不支持检查约束,会降低数据的插入速度
(5)默认值约束——DEFAULT
可以使用DEFAULT关键字声明默认值,有两种方式可以应用默认值
INSERT INTO laptop_family VALUES(70,'神州',DEFAULT);
INSERT INTO laptop_family(fid,fname) VALUES(80,'华为');
(6)外键约束——FOREIGN KEY
声明了外键约束的列,取值必须在另一个表的主键列上出现过,两者的列类型要保持一致,允许插入NULL
FOREIGN KEY(外键列) REFERENCES 另表(主键列)

mysql中的自增列
AUTO_INCREMENT: 自动增长,假如声明了自增列,无需手动赋值,直接赋值为NULL,会获取当前的最大值,然后加1
注意:
只适用于整数型的主键列上
自增允许手动赋值
3.简单查询
#演示表
#设置客户端连接服务器端编码
SET NAMES UTF8;
#丢弃数据库,如果存在
DROP DATABASE IF EXISTS tedu;
#创建数据库,设置编码
CREATE DATABASE tedu CHARSET=UTF8;
#进入创建的数据库
USE tedu;
#创建数据表dept
CREATE TABLE dept(
did INT PRIMARY KEY AUTO_INCREMENT,
dname VARCHAR(8) UNIQUE
);
#插入数据
INSERT INTO dept VALUES(10,'研发部');
INSERT INTO dept VALUES(20,'市场部');
INSERT INTO dept VALUES(30,'运营部');
INSERT INTO dept VALUES(40,'测试部');
#创建数据表emp
CREATE TABLE emp(
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(8),
sex BOOL DEFAULT 0,
birthday DATE,
salary DECIMAL(7,2),
deptId INT,
FOREIGN KEY(deptId) REFERENCES dept(did)
);
#插入数据
INSERT INTO emp VALUES(NULL,'Tom',1,'1990-5-5',6000,20);
INSERT INTO emp VALUES(NULL,'Jerry',0,'1991-8-20',7000,10);
INSERT INTO emp VALUES(NULL,'David',1,'1995-10-20',3000,30);
INSERT INTO emp VALUES(NULL,'Maria',0,'1992-3-20',5000,10);
INSERT INTO emp VALUES(NULL,'Leo',1,'1993-12-3',8000,20);
INSERT INTO emp VALUES(NULL,'Black',1,'1991-1-3',4000,10);
INSERT INTO emp VALUES(NULL,'Peter',1,'1990-12-3',10000,10);
INSERT INTO emp VALUES(NULL,'Franc',1,'1994-12-3',6000,30);
INSERT INTO emp VALUES(NULL,'Tacy',1,'1991-12-3',9000,10);
INSERT INTO emp VALUES(NULL,'Lucy',0,'1995-12-3',10000,20);
INSERT INTO emp VALUES(NULL,'Jone',1,'1993-12-3',8000,30);
INSERT INTO emp VALUES(NULL,'Lily',0,'1992-12-3',12000,10);
INSERT INTO emp VALUES(NULL,'Lisa',0,'1989-12-3',8000,10);
INSERT INTO emp VALUES(NULL,'King',1,'1988-12-3',10000,10);
INSERT INTO emp VALUES(NULL,'Brown',1,'1993-12-3',22000,NULL);
(1)查询特定的列
示例: 查询所有员工的姓名、工资
SELECT ename,salary FROM emp;
(2)查询所有的列
SELECT * FROM emp;
SELECT eid,ename,sex,birthday,salary,deptId FROM emp;
(3)给列起别名
示例: 查询所有员工的姓名和工资,使用汉字别名
SELECT ename AS 姓名,salary AS 工资 FROM emp;
练习: 查询所有员工的编号、姓名、性别、生日,使用汉字别名
SELECT eid AS 编号,ename AS 姓名,sex 性别,birthday 生日 FROM emp;
练习: 查询所有员工的姓名和工资,使用一个字母作为别名
SELECT ename e,salary s FROM emp;
(4)显示不同的记录/合并相同的记录
示例: 查询出员工都分布在哪些部门
SELECT DISTINCT deptId FROM emp;
练习: 查询出都有哪些性别的员工
SELECT DISTINCT sex FROM emp;
(5)查询时执行计算
示例: 计算2+3-5*6.4+3.6*8.7
SELECT 2+3-5*6.4+3.6*8.7;
练习: 查询出所有员工的姓名及其年薪
SELECT ename,salary*12 FROM emp;
练习: 假设每个员工的工资增加500,年终奖5000,查询出所有员工的姓名及其年薪,给列起汉字别名
SELECT ename 姓名,(salary+500)*12+5000 年薪 FROM emp;
(6)查询结果集排序
示例: 查询所有的部门,结果集按照部门编号升序排列
SELECT * FROM dept ORDER BY did ASC;#ascendant
示例: 查询所有的部门,结果集按照部门编号降序排列
SELECT * FROM dept ORDER BY did DESC;
describe 描述
descendant 降序
练习:查询所有的员工,结果集按照工资降序排列
SELECT * FROM emp ORDER BY salary DESC;
练习: 查询所有的员工,结果集按照年龄从小到大排列
SELECT * FROM emp ORDER BY birthday DESC;
练习: 查询所有的员工,结果集按照姓名升序排列
SELECT * FROM emp ORDER BY ename;
练习: 查询所有的员工,结果集按照工资降序排列,如果工资相同按照姓名升序排列
SELECT * FROM emp ORDER BY salary DESC,ename;
练习: 查询所有的员工,结果集中女员工显示在前边,如果性别相同,按照年龄从大到小排列
SELECT * FROM emp ORDER BY sex,birthday;
(7)条件查询
示例: 查询出编号为7的员工
SELECT * FROM emp WHERE eid=7;
练习: 查询出姓名叫king的员工的编号,姓名,工资
SELECT eid,ename,salary FROM emp WHERE ename='king';
练习: 查询出所有的女员工
SELECT * FROM emp WHERE sex=0;
练习: 查询出20号部门下的员工有哪些
SELECT * FROM emp WHERE deptId=20;
练习: 查询出工资为5000以上的员工有哪些
SELECT * FROM emp WHERE salary>5000;
|
比较运算符: > < = >= <= !=(不等于) |
练习: 查询出1991-1-1后出生的员工有哪些
SELECT * FROM emp WHERE birthday>'1991-1-1';
练习: 查询出不在10号部门的员工有哪些
SELECT * FROM emp WHERE deptId!=10;
练习: 查询出没有明确部门的员工有哪些
SELECT * FROM emp WHERE deptId IS NULL;
练习: 查询出有明确部门的员工有哪些
SELECT * FROM emp WHERE deptId IS NOT NULL;
练习: 查询出工资在6000以上的男员工有哪些
SELECT * FROM emp WHERE salary>6000 AND sex=1;
练习: 查询出工资在5000~8000之间所有员工
SELECT * FROM emp WHERE salary>=5000 AND salary<=8000;
SELECT * FROM emp WHERE salary BETWEEN 5000 AND 8000;
练习:查询出工资在5000以下和8000以上的所有员工
SELECT * FROM emp WHERE salary<5000 OR salary>8000;
SELECT * FROM emp WHERE salary NOT BETWEEN 5000 AND 8000;
练习: 查询出1990年之前和1993年之后出手的员工有哪些
SELECT * FROM emp WHERE birthday<'1990-1-1' OR birthday>'1993-12-31';
练习: 查询出1993年出生的员工有哪些
SELECT * FROM emp WHERE birthday>='1993-1-1' AND birthday<='1993-12-31';
SELECT * FROM emp WHERE birthday BETWEEN '1993-1-1' AND '1993-12-31';
练习: 查询出20号部门和30号部门的员工有哪些
SELECT * FROM emp WHERE deptId=20 OR deptId=30;
SELECT * FROM emp WHERE deptId IN(20,30);
练习: 查询出不在20号部门或者30号部门的员工有哪些
SELECT * FROM emp WHERE deptId NOT IN(20,30);
|
AND/OR BETWEEN.. AND../NOT BETWEEN..AND.. IS NULL/IS NOT NULL IN() / NOT IN() |
(8)模糊条件查询
示例: 查询出姓名中含有字母e的员工
SELECT * FROM emp WHERE ename LIKE '%e%';
练习: 查询出姓名中以e以为的员工
SELECT * FROM emp WHERE ename LIKE '%e';
练习: 查询出姓名中倒数第二个字符为e的员工
SELECT * FROM emp WHERE ename LIKE '%e_';
|
% 可以匹配任意个字符 >=0 _ 可以匹配任意1个字符 =1 以上两个匹配符必须结合LIKE关键字使用 |
(9)分页查询
假如查询的结果集有太多的数据,一次显示不完,可以使用分页显示
需要有两个条件: 当前的页码值、每页的数据量
SELECT * FROM emp LIMIT start,count;
start: 开始查询的值,从哪一条开始查询
count: 每页的数据量
|
start = (当前的页码值-1)*每页的数据量 |
注意事项: start和count必须是数值型,不能加引号。
假设每页显示5条数据
第1页: SELECT * FROM emp LIMIT 0,5;
第2页: SELECT * FROM emp LIMIT 5,5;
第3页: SELECT * FROM emp LIMIT 10,5;
假设每页显示6条数据,查询前3页
第1页: SELECT * FROM emp LIMIT 0,6;
第2页: SELECT * FROM emp LIMIT 6,6;
第3页: SELECT * FROM emp LIMIT 12,6;
#
Mysq sql语句教程的更多相关文章
- SQL语句教程
SQL指令 SELECT DISTINCT WHERE AND OR IN BETWEEN LIKE ORDER BY 函数 COUNT GROUP BY HAVING ALIAS 表格链接 外部链接 ...
- linux之SQL语句简明教程
本教程参考http://www.1keydata.com/cn/sql/ 目的是让初学者了解linux下Mysql的操作,但是我仍想侧重于SQL语句的讲解 sql语句的学习将按照下图的流程: 当然在这 ...
- [SQL基础教程] 2-1 SELECT语句基础
[SQL基础教程] 2-1 SELECT语句基础 列的查询 Syntax SELECT<列名>,..... FROM<表名>; SELECT col_1, col_2 FROM ...
- BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 连接数据库执行SQL语句
BIML 101 - BIML 快速入门教程 第一节 连接数据库执行SQL语句 本小节将用BIML建一个简单的可以执行的包. 新建一个biml文件,贴入下面的代码 1 <Biml xmlns=& ...
- mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句
mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...
- 【转】mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句
转自:除非申明,文章均为一号门原创,转载请注明本文地址,谢谢! 转载地址:http://blog.csdn.net/kutejava/article/details/9164353#t5 1. if ...
- SqlServer教程:经典SQL语句集锦
SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRAN ...
- linux之SQL语句简明教程---UPDATE DELETE FROM
我们有时候可能会需要修改表格中的资料.在这个时候,我们就需要用到 UPDATE 指令.这个指令的语法是: UPDATE "表格名" SET "栏位1" = [新 ...
- linux之SQL语句简明教程---INSERT INTO
到目前为止,我们学到了将如何把资料由表格中取出.但是这些资料是如果进入这些表格的呢? 这就是这一页 (INSERT INTO) 和下一页 (UPDATE) 要讨论的. 基本上,我们有两种作法可以将资料 ...
随机推荐
- Netty 如何实现心跳机制与断线重连?
作者:sprinkle_liz www.jianshu.com/p/1a28e48edd92 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, ...
- python面试题之什么是Tkinter ?
TKinter是一款很知名的Python库,用它我们可以制作图形用户界面.其支持不同的GUI工具和窗口构件,比如按钮.标签.文本框等等.这些工具和构件均有不同的属性,比如维度.颜色.字体等. > ...
- 模拟javaWeb责任链的设计
这篇文章介绍了责任链模式的应用:本文介绍如果自己实现一个责任链 定义请求和响应信息 简单定义请求类Request(封装一个字符串) public class Request { String requ ...
- 61.Merge k Sorted Lists(合并k个排序链表)
Level: Hard 题目描述: Merge k sorted linked lists and return it as one sorted list. Analyze and descri ...
- Qt 【widget如何铺满窗口】
刚接触qt不是很长时间,都是使用ui拖拽控件实现界面,然后发现有些问题就是控件一旦多了起来,拖拽就不好控制了,然后就转而使用纯代码开发. 一下是碰到第一个问题: 创建一个MainWidget; Mai ...
- C语言之——__attribute__
__attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法.这个功能是跟操作系统没关系,跟编译器有关 . __ ...
- 【leetcode】989. Add to Array-Form of Integer
题目如下: For a non-negative integer X, the array-form of X is an array of its digits in left to right o ...
- UNP学习第五章(二)
一.POSIX信号处理 信号:告知某进程发生了某个事件的通知(软中断),通常是异步的. 信号可以:由进程发给另一个进程,由内核发给某个进程. 设置信号处理办法,有三个选择: 1.写一个函数,在信号发生 ...
- centos下安装java jdk1.8
---恢复内容开始--- mysql密码修改了,发现还没装jdk,那就一起记录下来吧.虽然网上好多,但自己想查更方便了. 查看有没有装jdk #java -version显示下面信息,不是oracle ...
- centos7 安装PHP5.3 报错undefined reference to symbol '__gxx_personality_v0@@CXXABI_1.3'
系统:centos 7 原有PHP版本:5.6.27,5.4.45 试着安装nginx+多php版本,首先安装了5.6和5.4的版本,一帆风顺,但是在安装5.3.29版本时,出现问题了,configu ...