如何学习 SQL 语言

您的位置: >
SQL中的注释
学习标签:
本文导读:当你的SQL语句集合变得越来越大而非常复杂时,你需要对你的语句进行注释。你可以使用两种方法在你的语句中添加注释。假如你需要添加单行的注释时,你可以在一行后使用两个连字符
在t-sql中,注释表示由用户提供的文本,服务器不对注释进行计算。
我们可以将注释写成单独一行,也可以把注释写在t-sql语句的后面,还可把注释嵌套在t-sql语句块中。
在Transact-SQL 中可使用两类注释符,单行注释和多行注释。
use db--使用名为pangu的数据库
declare @startdate datetime
set @startdate=&1/1/2000&
select &Start Date:&+convert(varchar(12)@startdate)
--convert()函数用于转换数据类型
DECLARE @myvariable DATETIME
The following statements retrieve the current date and time and extract the day of the week from the results.
SELECT @myvariable=GETDATE()
SELECT DATENAME(dw,@myvariable)
您可能感兴趣
一月好评排行榜SQL 是用于访问和处理数据库的标准的计算机语言。
在本教程中,您将学到如何使用 SQL 访问和处理数据系统中的数据,这类数据库包括:Oracle, Sybase, SQL Server, DB2, Access 等等。
注:本教程中出现的姓名、地址等信息仅供教学,与实际情况无关。
在 W3School 测试你的 SQL 技能!SQL语言:结构化查询语言,是关系型数据库查询语言的标准,不同的数据库虽然有自己私有扩展,但关键词都支持:(select、update、delete、insert、where)
SQL语句分类:像Oracle、MSSQL都是通用的
DDL:数据定义语言(create、alter、drop、
SQL语言:结构化查询语言,是关系型数据库查询语言的标准,不同的数据库虽然有自己私有扩展,但关键词都支持:(select、update、delete、insert、where)
SQL语句分类:像Oracle、MSSQL都是通用的
DDL:数据定义语言(create、alter、drop、rename)
DML:数据库维护语言(select、insert、update、delete)
DCL:数据库控制语言,权限(Grant、revoke)
TCL:事务控制语言(commt、sarepqint):新型的语句
一、数据库增删改查
根据这个表结构以下来操作:
mysql& select *
+----+----------+------+
| id | name
+----+----------+------+
1.创建数据库
2.删除数据库
3.创建一个用户表
create table user(id int,name varchar(30),pass varchar(30));
4.插入数据
insert into user(id,name,pass) values("1","zhangsan","123");
5.删除一个表
6.查看表字段
7.查看表数据
8.修改表名
rename table user to tab1;
9.更新数据
update user set pass="newpass" where pass=123;
#把密码更新为newpass
update user set id=10,name='lisi' where id=1;
#把id记录的name更新为id10和name为lisi
10.重命名字段名
alter table user change pass newname varchar(30);
11.表中添加一个字段
12.修改字段
alter table user modify age int no null default 20; #当年龄输入为空时,默认为20岁
13.删除表中的一个字段
14.删除一条记录
delete from user where id=1;
15.查找一条记录
select id,name,pass from user where id=1;
16.删除ID记录
delete from user where id&=3 id&=5;
#删除大于3小于5的id
delete from user where id in(1,3,5);
#删除1,3,5的id
delete from user where id=1 or id=3 or id=5;
#删除1,3,5的id
delete from user where id between 1 and 5;
#删除1至5的id
1.返回结果删除重复项
2.查询字段中为NULL
select * fro
select * from wh #查询不为NULL的
3.like模糊查询,包含zhang的列出来
select * from user where name like '%zhang%';
select * from user where name like '%zhang%' or name like '%li%';#查找包含zhang或li的列出来
也可以使用正则表达式查询,生产环境一般不用的,因为查询慢,效果一样
select * from user where name regexp 'li';4.使用order by对查询结果排序(升序/降序),默认是升序
select id,name,pass from user order by id asc/
5.使用limit取出排名前三个
select * from user
order by id desc limit 3;
6.concat函数使用-字符串连接符
mysql& select id,name,pass,concat(id,'_',name)
+----+----------+------+------------+
| id | name
| pass | idname
+----+----------+------+------------+
1 | zhangsan | 123
| 1_zhangsan |
3 | zhaowu
| 3_zhaowu
+----+----------+------+------------+
7.rand函数随机排序,如随机抽取前三名
select * from user order by rand() limit 3;
8.count统计,如统计多少个id记录
select count(*)
#count为自定义显示查询结果后字段名,*为mysql优化后的查询方法,要比直接写入id效率高
select count(id) from user where name='zhangsan'; #统计zhangsan多少条记录
9.sum求和,如统计同消费了多少钱
select sum(id) from user where name='lisi';
#所有id数加在一起
10.avg平均数,如求班级平均分
select avg(id)
11.max最大值,如得到一个最高分
select max(id)
12.min最小值
select min(id)
13.group by分组聚合
select name,count(id) from user group b
#使用count来聚合,基于name分组,再order by排序下(一般排名都使用分组聚合)
select name,count(id) count from user group by name having count&=3;
#查询前三名,having是对分组的结果进行筛选,这不能用where,count代表查询结果后显示的字段名
14.普通多表查询(前提:两个表必须有关系)
先创建两个有关系的表:
create table user(id int unsigned auto_increment primary key,name varchar(30),age int);
create table post(id int unsigned auto_increment primary key,uid int,title varchar(200),content text);
结果一:查询用户发的所有记录
select user.name,post.title,post.content from user,post where user.id=post.
结果二:统计每个用户有多少个记录
select user.name,post.title,post.content count(id) from user,post where user.id=post.uid group by user.
15.联表查询(查询成绩)
mysql& select * from tb1;
+------+----------+
+------+----------+
1 | zhangsan |
+------+----------+
mysql& select * from tb2;
+------+-------+
+------+-------+
+------+-------+
mysql& select tb1.name,tb2.score from tb1,tb2 where tb1.id = tb2.
+----------+-------+
+----------+-------+
| zhangsan |
+----------+-------+
二、表字段类型
int(size):整型,只能存整数数字,不能为空,默认允许输入null,也可以设置不允许写(not null)
float:浮点型,可以写入整数或浮点数
1.1字段属性
unsigned:无符号,全是整数
zerofill:与长度无关,不够3位时前面补0,默认看不见
null与not null:允许输入null和不允许输入
default:不允许null情况下,当输入空时,则使用默认值
auto_increment:一般自增ID
例如,设置id为自增:
create table user(id int unsigned auto_increment primary key,name varchar(30),pass varchar(30));
primary key:有auto_increment必须设置为主键索引,提供查询速度,再插入就不用写id列了,如果你写了,就以你写的为准,继续自增。
例如,创建一个表,当输入性别为空时,默认则为男:
create table user2(id int unsigned auto_increment primary key,name varchar(30),sex varchar(5) not null default "nan");
查看字段信息:
mysql& desc user2;
+-------+------------------+------+-----+---------+----------------+
| Field | Type
| Null | Key | Default | Extra
+-------+------------------+------+-----+---------+----------------+
| int(10) unsigned | NO
| PRI | NULL
| auto_increment |
| varchar(30)
| varchar(5)
+-------+------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
char(size):占用size的字节,但查询速度快,最大支持255个字符
varchar(size):存多少占多少,剩点空间,最大支持65535个字符
text:支持65535字节
longtext:支持42亿字节
3.日期类型(有的会使用int类型来存时间戳)
以下是官方说法占用的字节,但实际会有不符。
date:年月日,占用3个字节
time:时分秒,占用3个字节
datetime:年月日时分秒,占用8个字节
year:年,占用1个字节
三、用户管理
1.设置Mysql密码
方法一:set password=password('newpass');
方法二:update user set password=password('newpass') where user='root';
方法三:grant all on *.* to 'root'@'localhost' identified by 'newpass';
2.创建用户并授权
grant all privileges on *.* to 'user'@'localhost' identified by 'pass';
*.*:对应的是数据库/表的权限
localhost:只允许本地访问,也可以设置%为所有访问
3.撤销用户权限
revoke all privileges on *.* from 'root'@'localhost' identified by 'pass';
四、数据库字符集
1.查看服务器基本信息\s
Ver 14.14 Distrib 5.5.34, for Linux (x86_64) using
EditLine wrapper
Connection id:
Current database:
Current user:
root@localhost
Not in use
Current pager:
Using outfile:
Using delimiter:
Server version:
5.5.34-log Source distribution
Protocol version:
Connection:
Localhost via UNIX socket
Server characterset:
characterset:
Client characterset:
characterset:
UNIX socket:
/tmp/mysql.sock
47 days 4 hours 54 min 1 sec
Threads: 4
Questions:
Slow queries: 1
Opens: 283512
Flush tables: 23
Open tables: 46
Queries per second avg: 46.447
可以看到四种默认字符集是latin1,修改四种默认字符集,client和connection两个要是一样的。
set character_set_server=utf8;
set character_set_database=utf8;
set character_set_client=utf8;
set character_set_connection=utf8;
也可以修改my.cnf默认字符集
character_set_server=utf8
default-character-set=utf8
重启mysql!
2.查看创建数据库时使用的字符集
五、创建表字段索引
1.主键索引
1.1创建一个主键索引,一般创建表时已经设置
alter table user add primary key(id);
1.2删除一个主键索引
alter table u
2.普通索引
2.1创建一个普通索引
alter table user add index index_name(name);
2.2删除一个普通索引
alter table user drop index index_
2.3查看主键索引和普通索引
注:修改字段名不影响索引。
3.查看表中创建的索引
mysql& desc user2;
+-------+------------------+------+-----+---------+----------------+
| Field | Type
| Null | Key | Default | Extra
+-------+------------------+------+-----+---------+----------------+
| int(10) unsigned | NO
| PRI | NULL
| auto_increment |
| varchar(30)
| MUL | NULL
| varchar(30)
+-------+------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
上面key中的PRI代表是主键索引,MUL代表是普通索引。
4.查看索引信息
mysql& show index from user2;
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name
| Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
0 | PRIMARY
NULL | NULL
1 | index_name |
NULL | NULL
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)
可以看到user表,做了PRIMARY主键索引和index_name名字的普通索引。
5.测试是否使用索引
mysql& desc select id,name from user2 where name='zhangsan';
+----+-------------+-------+------+---------------+------------+---------+-------+------+--------------------------+
| id | select_type | table | type | possible_keys | key
| key_len | ref
| rows | Extra
+----+-------------+-------+------+---------------+------------+---------+-------+------+--------------------------+
1 | SIMPLE
| user2 | ref
| index_name
| index_name | 33
1 | U Using index |
+----+-------------+-------+------+---------------+------------+---------+-------+------+--------------------------+
1 row in set (0.00 sec)
用desc检测语句,可以看到查询一条张三的记录,使用了普通索引index_name这个名字,检索了一行(rows)就找到了这条记录。
用云栖社区APP,舒服~
【云栖快讯】支撑千亿营收,阿里如何做研发?淘宝如何做敏捷实践?如何面对开发中的“黑天鹅”事件?6月29日首届阿里研发效能嘉年华,独家直播,赶紧预约吧!&&
RDS是一种稳定可靠、可弹性伸缩的在线数据库服务。支持MySQL、SQL Server、PostgreSQL、高...
云数据库HybridDB(ApsaraDB HybridDB)是一种在线MPP大规模并行处理数据仓库服务。云数据...
阿里云机器学习是基于阿里云分布式计算引擎的一款机器学习算法平台。用户通过拖拉拽的方式可视化的操作组件来进行试验,...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...
2017杭州云栖大会火热抢票
Loading...> 问题详情
SQL语言是()的语言,容易学习 。 A.过程化 B. 非过程化 C.格式化 D. 导航式
悬赏:0&答案豆
提问人:匿名网友
发布时间:
SQL语言是()的语言,容易学习 。A.过程化 B. 非过程化C.格式化 D. 导航式请帮忙给出正确答案和分析,谢谢!
为您推荐的考试题库
网友回答(共1条)展开
SQL语句的特点之一就是高度非过程化。
您可能感兴趣的试题
12. SQL语言的数据操纵语句包括SELECT、INSERT、UPDATE、DELETE等。其中最重要的,也是使用最频繁的语句是( ) 。A. SELECT B. INSERTC. UPDATE D. DELETE23. 在视图上不能完成的操作是(&) 。A. 更新视图 B. 查询C. 在视图上定义新的表 D. 在视图上定义新的视图34. SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,CREATE、DROP、ALTER语句是实现哪种功能(&)。A. 数据查询 B. 数据操纵C. 数据定义 D. 数据控制45. SQL语言中,删除一个视图的命令是(&)。A.DELETEB.DROPC.CLEARD.REMOVE
我有更好的答案
相关考试课程
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……
找答案会员
享三项特权
找答案会员
享三项特权
找答案会员
享三项特权
选择支付方式:
支付宝付款
郑重提醒:支付后,系统自动为您完成注册
请使用微信扫码支付(元)
支付后,系统自动为您完成注册
遇到问题请联系在线客服QQ:
请您不要关闭此页面,支付完成后点击支付完成按钮
遇到问题请联系在线客服QQ:
恭喜您!升级VIP会员成功
常用邮箱:
用于找回密码
确认密码:你正在使用的浏览器版本过低,将不能正常浏览和使用知乎。

我要回帖

 

随机推荐