返回首页
当前位置: 主页 > 数据库 > Mysql教程 >

SQL十大基本语法入门

时间:2019-11-22 11:10来源:电脑教程学习网 www.etwiki.cn 编辑:小山哥
首先是SQL执行顺序:
第一步:执行FROM
第二步:WHERE条件过滤
第三步:GROUP BY 分组
第四步:执行SELECT 投影列
第五步:HAVING条件过滤
第六步:执行ORDER BY排序
 
一、创建、删除库
1.-- 创建新数据库 
2.CREATE DATABASE 数据库名; 
3.-- 删除数据库 
4.DROP DATABASE 数据库名;
 
二、增加
1、添加列名、设置主键、设置自动增长列
primary key表示当前列为主键列,不能重复,不能为空。
out_increment表示当前列为自动增长列,由DBMS分配该列的值,可以保证不重复。
 
1.CREATE TABLE t_user(
2.    id INT PRIMARY KEY AUTO_INCREMENT, -- 编号 
3.    userName VARCHAR(20),-- 用户名 
4.    birthday DATE,-- 生日 
5.    tel CHAR(11),-- 电话
6.    -- 枚举类型,该列的值只能取男和女 
7.    sex ENUM('男','女'),
8.    -- 性别 -- 最后一列不能加“,”。 
9.    money INT -- 账户余额 
10.)
 
2.添加行(新增记录)
如果添加多条信息,中间用","分割。VALUES只用写一次,写在表头和表值之间。
如果列名和列的值不写,则默认添加为空(null),如果数据库设计时存在默认值,则为添加默认值。
 
1.INSERT INTO t_user(表头1,表头2) values(值1,值2); 
2.例如: 
3.INSERT INTO t_user(userName,pwd,birthday,tel,sex,money) 
4.VALUES ('张无忌','123','1980-05-09','13948577789','男',2000); 
5.例如: 
6.INSERT INTO t_student(userName,pwd,birthday,tel,sex) 
7.VALUES('张勇','111','1998-01-01','13112341234','男');
 
3.添加列(维护常用)
1.-- t_student:表名;address:表头。 
2.ALTER TABLE t_student ADD address VARCHAR(50);
 
三、删除
删除表
1.-- t_user:表名 
2.DROP TABLE t_user;
 
删除列
1.-- t_student:表名;userAddress:列名 
2.ALTER TABLE t_student DROP COLUMN userAddress;
 
删除行
1.-- 如果不加where 后面的条件则全部删除。 
2.DELETE FROM t_user WHERE id=2;
 
四,修改
修改列
修改列的值必须与修改后的类型相符,如果修改列的值为null,则可以改为任意类型。如果修改列的值类型为varchar,最长为20,则修改后的类型必须为char类型,长度不能低于20。
1.ALTER TABLE t_student CHANGE address userAddress VARCHAR(100);
 
修改值
1.UPDATE t_product SET 修改列名=修改后新值 WHERE id=1; 
2.-- 修改,将张无忌的密码修改为333,工资修改为2500 
3.UPDATE t_user SET pwd='333',money='2500' WHERE userName='张无忌';
 
五,查询
查询表中所有数据
*表示显示所有的列,也可以指定显示列的列表,中间用","分割。
1.SELECT * FROM t_user; 
2.-- 例如(显示姓名和工资列): 
3.select userName,money from t_user
 
查询返回限定行
第一个参数为起始记录数,从0开始,第二个参数为显示记录数。
1.-- MySQL语法
2.SELECT * FROM t_student LIMIT 0,3;
 
查询空值null
null不能用=,只能用is null 或 is not null
1.SELECT *FROM t_student WHERE money IS NULL;
 
查询多条信息(or/in)
1.-- 查询张三和李四的信息 
2.SELECT * FROM t_student WHERE userName='张三' OR userName='李四'; 
3.SELECT * FROM t_student WHERE userName IN('张三','李四');
 
模糊查询(_或%)
-- 查询姓李的二个字的员工 
SELECT * FROM t_student WHERE userName LIKE '李_'; 
-- 查询出所有商品名包括“糕”的商品的信息 
SELECT * FROM t_product WHERE productName LIKE '%糕%';
 
查询多条件+显示部分(LIMIT)
1.-- 查询前5条价格在100-1000的酒类商品 (MySQL语法)
2.SELECT * FROM t_product WHERE productType='酒类' AND price>=100 AND price<=1000 LIMIT 0,5 ;
 
查询去除重复的类名(distinct)
-- 查询所有的性别,distinct 表示去除重复记录 
SELECT DISTINCT sex FROM t_student;
 
查询排序显示(ORDER BY)
-- 按员工工资排序,默认为升序ASC,降序需要加上DESC。 
-- 工资相同,按年龄大小排序。 
SELECT * FROM t_student ORDER BY money DESC,birthday;
 
查询当前日期
1.select curdate() from 表名
 
六,判断短语
单分支条件判断
1.if(条件,返回值1,返回值2)
2. -- 例如: 
3.select s.*,if(grade>=60,'合格','不合格')appraise from t_students;
 
多分支条件判断
1.(case 
2.when 条件1 then 返回值1 
3.when 条件2 then 返回值2 
4.else 返回值3 END) 
5.-- 例子1(选择显示): 
6.SELECT p.*,(CASE 
7.            WHEN money<5000 THEN '低薪阶层' 
8.            WHEN money>=5000 AND money<=10000 THEN '中薪阶层' 
9.            WHEN money>10000 THEN '高薪阶层' 
10.            ELSE '实习生' END) grade FROM t_student p; 
11.-- 例子2(选择添加): 
12.UPDATE t_product SET price =price+(CASE 
13.                                    WHEN productType='药品类' THEN 5 
14.                                    WHEN productType='食品类' THEN 2 
15.                                    WHEN productType='酒类' THEN 100 END);
 
七、聚合函数的运用
1.-- 学生成绩表 
2.CREATE TABLE t_grade( 
3.    id INT PRIMARY KEY AUTO_INCREMENT,-- id 主键 
4.    sname VARCHAR(20),-- 学生姓名 
5.    sex ENUM('男','女'),-- 学生性别 
6.    className VARCHAR(20),-- 学生班级 
7.    grade INT -- 学生成绩 
8.);
 
a.统计学生的人数
1.-- count(*)只要是记录都要统计。count(列名)只统计非空列。 
2.SELECT COUNT(*) '学生总人数', COUNT(grade)'参考人数' FROM t_grade;
 
b.统计学生的总分、平均分、最高分、最低分
1.-- avg求平均分,也只统计非空列 
2.SELECT SUM(grade) ,AVG(grade),SUM(grade)/COUNT(*), MAX(grade),MIN(grade) FROM t_grade
 
c.统计每个班的人数
1.SELECT className,COUNT(*) num FROM t_grade GROUP BY className;
 
d.统计每个班的总分和平均分
SELECT className,SUM(grade)'总分',SUM(grade)/COUNT(*) '平均分' FROM t_grade GROUP BY className;
 
八、having运用
1.-- 列出班级人数小于等于3个人的班级 
2.SELECT className,COUNT(*) FROM t_grade GROUP BY className HAVING COUNT(*)<=3; 
3.-- 列出班级总分大于300分的班级 
4.SELECT className,SUM(grade) FROM t_grade GROUP BY className HAVING SUM(grade)>300;
 
九、复制表
1.create table 新表名 select * from 原表名;
 
十、where与if条件连用
1.WHERE  IF(条件,  true执行条件, false执行条件 )
2.select * from sys_user where if(id<10,name='zhangsan',name='lisi')
------分隔线----------------------------
标签(Tag):
------分隔线----------------------------
推荐内容
猜你感兴趣