SQL基本使用

目录

将数据放入自己的mysql数据库中做练习用

1.操作登录使用

1.1 登陆Mysql数据库

1.2展示(查询)所有数据库

1.3 进入数据库

1.4 创建数据库

2 DDL

对表结构修改

3 DCL

1 查看用户权限

2 被授权的用户

3 授予权限

4 撤销权限

4 DQL:

1 列(字段)控制

2 条件控制:

条件查询

模糊查询

3 排序:order by 排序的关键字

4 聚合函数:聚合函数用来做某列的纵向运算

5 分组查询

6 limit字句


SQL语法教程 https://www.w3school.com.cn/sql/index.asp

mysql教程https://www.runoob.com/mysql/mysql-tutorial.html

将数据放入自己的mysql数据库中做练习用

-- 如果test数据库不存在,就创建test数据库:
CREATE DATABASE IF NOT EXISTS test;

-- 切换到test数据库
USE test;

-- 删除classes表和students表(如果存在):
DROP TABLE IF EXISTS classes;
DROP TABLE IF EXISTS students;

-- 创建classes表:
CREATE TABLE classes (
    id BIGINT NOT NULL AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 创建students表:
CREATE TABLE students (
    id BIGINT NOT NULL AUTO_INCREMENT,
    class_id BIGINT NOT NULL,
    name VARCHAR(100) NOT NULL,
    gender VARCHAR(1) NOT NULL,
    score INT NOT NULL,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 插入classes记录:
INSERT INTO classes(id, name) VALUES (1, '一班');
INSERT INTO classes(id, name) VALUES (2, '二班');
INSERT INTO classes(id, name) VALUES (3, '三班');
INSERT INTO classes(id, name) VALUES (4, '四班');

-- 插入students记录:
INSERT INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'M', 90);
INSERT INTO students (id, class_id, name, gender, score) VALUES (2, 1, '小红', 'F', 95);
INSERT INTO students (id, class_id, name, gender, score) VALUES (3, 1, '小军', 'M', 88);
INSERT INTO students (id, class_id, name, gender, score) VALUES (4, 1, '小米', 'F', 73);
INSERT INTO students (id, class_id, name, gender, score) VALUES (5, 2, '小白', 'F', 81);
INSERT INTO students (id, class_id, name, gender, score) VALUES (6, 2, '小兵', 'M', 55);
INSERT INTO students (id, class_id, name, gender, score) VALUES (7, 2, '小林', 'M', 85);
INSERT INTO students (id, class_id, name, gender, score) VALUES (8, 3, '小新', 'F', 91);
INSERT INTO students (id, class_id, name, gender, score) VALUES (9, 3, '小王', 'M', 89);
INSERT INTO students (id, class_id, name, gender, score) VALUES (10, 3, '小丽', 'F', 85);

-- OK:
SELECT 'ok' as 'result:';

1.操作登录使用

1.1 登陆Mysql数据库

mysql -u root -p 密码
mysql -uroot -p

1.2展示(查询)所有数据库

命令完成后输入英文符号;并回车执行命令

show databases;

1.3 进入数据库

use dataname;

1.4 创建数据库

create database dataname;

2 DDL

包括创建,删除,修改数据库,表,列的SQL语句。主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用

对表结构修改

create table tablename(name varchar(32),age int);//创建表(字段)

alter table //删除添加修改表
alter table person add home varchar(32);//添加列
alter table person drop name;//删除列

alter table student rename person;
/*这里的student是原名,person是修改过后的名字
用rename来重命名,也可以使用rename to
*/


alter table person change stu_name name varchar(25);
/*
这里stu_name是原名,name是新名
需要注意的是不管改不改数据类型,后面的数据类型都要写
如果不修改数据类型只需写成原来的数据类型即可
tips:我们同样可以使用change来达到modify的效果,只需在其后写一样的字段名
*/


alter table person modify name varchar(20);
//此处modify后面的name为字段名,我们将原来的varchar(25)改为varchar(20)


alter table person  modify name c_name integer;
desc person //查看表结构

3 DCL

DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。

1 查看用户权限

当成功创建用户账户后,还不能执行任何操作,需要为该用户分配适当的访问权限。可以使用SHOW GRANTS FOR 语句来查询用户的权限。例如:

SHOW GRANTS FOR test

2 被授权的用户

'user_name'@'host_name'
  • Tips:'host_name'用于适应从任意主机访问数据库而设置的,可以指定某个地址或地址段访问。
  • 可以同时授权多个用户。

user表中host列的默认值

host 说明
% 匹配所有主机
localhost localhost不会被解析成IP地址,直接通过UNIXsocket连接
127.0.0.1 会通过TCP/IP协议连接,并且只能在本机访问
::1 ::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1

host_name格式有以下几种:

  • 使用%模糊匹配,符合匹配条件的主机可以访问该数据库实例,例如192.168.2.%%.test.com
  • 使用localhost127.0.0.1::1及服务器名等,只能在本机访问;
  • 使用ip地址或地址段形式,仅允许该ip或ip地址段的主机访问该数据库实例,例如192.168.2.1192.168.2.0/24192.168.2.0/255.255.255.0
  • 省略即默认为%

3 授予权限

授予列(字段)权限时,priv_type的值指定为CREATE USER权限,具备创建用户、删除用户、重命名用户和撤消所有特权,而且是全局的。

有ON,是授予权限,无ON,是授予角色。如:

-- 授予数据库db1的所有权限给指定账户
GRANT ALL ON db1.* TO 'user1'@'localhost';
-- 授予角色给指定的账户
GRANT 'role1', 'role2' TO 'user1'@'localhost', 'user2'@'localhost';

若要权限生效,需要执行以下语句:

FLUSH PRIVILEGES;

4 撤销权限

REVOKE语法和GRANT语句的语法格式相似,但具有相反的效果

REVOKE
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    FROM user [, user] ...

REVOKE ALL [PRIVILEGES], GRANT OPTION
    FROM user [, user] ...

REVOKE PROXY ON user
    FROM user [, user] ...

4 DQL:

它们是SELECT就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言

select columnlist //列名
		from table_list //哪些表获取数据
		where condition //过滤数据的条件
		group by grouping //分组条件
		having condition //对分组结果进行过滤
		start,limit //对结果进行限定 

查询需求如下:
–条件:年龄为奇数
按home 分组
查询分数最高的 并且大于80分
只返回一条
查询person表中的age为奇数的以home分组并且age为1的 查询一条

select age from person where age%2=1 group by home having age=1 limit 1;

1 列(字段)控制

	①:查询所有列
		select * from 表名;   //其中 * 表示查询所有列

	②:查询指定 列()
		select 列1 [,列2,列3...] from 表名;

	③:完全重复的记录只显示一次
		select distinct 列名 from 表名;

	④:列运算
		* 数值类型的列可以做加、减、乘、除运算

			>select 列名+2 from 表名;   把这个列的值加上2

		* 字符串类型的列可以做连续运算

			>select concat('***',列名) from 表名;   在这个列值前面拼接上3个***

		* 转换NULL值

			有时候需要把null转换为其他值再来做运算或者赋值,如果该列存在null值,做运算还是null,这时就希望把该列的null值转化为0或者其他值再来做运算
			>select ifnull(列名,想要转化为什么样的值) from 表名;

		* 给列起别名

		>select ifnull(列名,0)+100 AS 别名 from 表名;   AS 可以省略不写

2 条件控制:

条件查询

与前面的讲的UPDATE和DELETE的语句一样,SELECT语句也可以使用 WHERE关键字来控制条件

SELECT 列名1,列名2... 列名n FROM 表名 WHERE 条件;(age>10 AND name IS NOT NULL)

模糊查询

当你想查询姓cao的name时,这时就可以使用模糊查询

SELECT * FROM 表名 WHERE name LIKE '黄_';( 1 个下划线代表 1 个字符)
		:查询限制了字符长度
SELECT * FROM 表名 WHERE name LIKE '黄%';( % 匹配 0...n 个字符)
		:查询不限制字符长度
SELECT * FROM 表名 WHERE name LIKE '%小%';(name 中有"小"的所有数据)

3 排序:order by 排序的关键字

(1)升序
	* SELECT * FROM 表名 ORDER by 列名 ASC;(ASC :升序)
		>按照 列名 来做排序---升序
		>其中ASC可以省略(建议不要省略)
(2)降序
	* SELECT * FROM 表名 ORDER BY 列名 DESC; ( DESC : 降序)
		>按照 列名 来做排序---降序
		>其中DESC不可以省略
(3)多列排序
	SELECT * FROM 表名 ORDER BY 列名1 ASC ,列名2 DESC;

4 聚合函数:聚合函数用来做某列的纵向运算

(1)COUNT 
	SELECT COUNT(*) FROM 表名;
		>计算表中列不全为NULL的记录的行数(有效记录)
	SELECT COUNT(列名) FROM 表名;
		>计算表中指定的列中值不为NULL的记录的行数
(2)MAX 
	SELECT MAX(列名) FROM 表名;
		>计算指定列中的最大值
(3)MIN
	SELECT MIN(列名) FROM 表名;
		>计算指定列中的最小值
(4)SUM
	SELECT SUM(列名) FROM 表名;
		>计算指定列中的所有值的总和
(5)AVG
	SELECT AVG(列名) FROM 表名;
		>计算指定列中所有值总和的平均值

5 分组查询

分组查询是把所有记录使用某一列进行分组,然后查询组信息
例如:
	SELECT age,COUNT(*) FROM 表名 GROUP BY age;
		>按照年龄进行分组,查询各个年龄的记录数
	SELECT sex,MAX(age) FROM 表名 GROUP BY sex;
		>按照性别进行分组,查询每组性别中的最大年龄

SELECT 列名 ,COUNT(*) FROM 表名 GROUP BY 列名 HAVING COUNT(*) > 3;
	>按照性别分组,查询每组的记录数 大于 3 条记录数, 

6 limit字句

(方言—只有MySql有)

LIMIT 用来限定查询结果的起始行,以及总行数

例如:查询起始行为第3行,一共查询4行记录

SELECT * FROM 表名 LIMIT (pageIndex - 1)* pageCount , pageCount;
	>其中2表示从第三行开始查,4表示查询4条记录,即:第3、4、5、6条记录

limit 被用来做数据分页查询

 

 

 

 

 

 

 

 

你可能感兴趣的:(数据库mysql)