Duckdb Sample - 01
Launch Duckdb
duckdb
.open newdbname.duckdb
CREATE TABLE employees (
id INTEGER PRIMARY KEY,
name VARCHAR NOT NULL,
email VARCHAR UNIQUE,
department VARCHAR,
salary DECIMAL(10, 2) CHECK (salary > 0)
);
INSERT INTO employees (id,name, email, department, salary) VALUES
(1,'Rachel Green', 'rachel.green@friends.com', 'Fashion', 55000.00);
INSERT INTO employees (id,name, email, department, salary) VALUES
(2,'Monica Geller', 'monica.geller@friends.com', 'Culinary', 62000.50);
INSERT INTO employees (id,name, email, department, salary) VALUES
(3,'Phoebe Buffay', 'phoebe.buffay@friends.com', 'Massage Therapy', 48000.00);
INSERT INTO employees (id,name, email, department, salary) VALUES
(4,'Joey Tribbiani', 'joey.tribbiani@friends.com', 'Acting', 40000.75);
INSERT INTO employees (id,name, email, department, salary) VALUES
(5,'Chandler Bing', 'chandler.bing@friends.com', 'Data Analysis', 70000.25);
INSERT INTO employees (id,name, email, department, salary) VALUES
(6,'Ross Geller', 'ross.geller@friends.com', 'Paleontology', 65000.00);
select * from employees
- .databases or show databases;
- .tables or show tables;
- .mode list
- .mode table
- .mode csv
- summarize employees;
- summarize select name,email from employees;
- .exit
CREATE SEQUENCE dept_id_seq;
drop table if exists departments;
CREATE TABLE departments (
id INTEGER PRIMARY KEY DEFAULT nextval('dept_id_seq'),
dept_name VARCHAR NOT NULL
);
insert into departments(dept_name) values('Fashion');
insert into departments(dept_name) values('Culinary');
insert into departments(dept_name) values('Massage');
insert into departments(dept_name) values('Acting');
insert into departments(dept_name) values('Data Analysis');
insert into departments(dept_name) values('Paleontology');
CREATE SEQUENCE emp_id_seq;
DROP TABLE if exists employees;
CREATE TABLE if not exists employees (
id INTEGER PRIMARY KEY DEFAULT nextval('emp_id_seq'),
name VARCHAR NOT NULL,
email VARCHAR UNIQUE,
department VARCHAR,
salary DECIMAL(10, 2) CHECK (salary > 0),
hire_date DATE DEFAULT CURRENT_DATE,
);
INSERT INTO employees (name, email, department, salary) VALUES
('Rachel Green', 'rachel.green@friends.com', 'Fashion', 55000.00);
INSERT INTO employees (name, email, department, salary) VALUES
('Monica Geller', 'monica.geller@friends.com', 'Culinary', 62000.50);
INSERT INTO employees (name, email, department, salary) VALUES
('Phoebe Buffay', 'phoebe.buffay@friends.com', 'Massage Therapy', 48000.00);
INSERT INTO employees (name, email, department, salary) VALUES
('Joey Tribbiani', 'joey.tribbiani@friends.com', 'Acting', 40000.75);
INSERT INTO employees (name, email, department, salary) VALUES
('Chandler Bing', 'chandler.bing@friends.com', 'Data Analysis', 70000.25);
INSERT INTO employees (name, email, department, salary) VALUES
('Ross Geller', 'ross.geller@friends.com', 'Paleontology', 65000.00);
INSERT INTO employees (id,name, email, department, salary) VALUES
(8,'Ben Geller', 'ben.geller@friends.com', 'Student', 1.00);
INSERT INTO employees (name, email, department, salary) VALUES
('Emma Green', 'emma.green@friends.com', 'Kid', 1.00);
CREATE SEQUENCE emp_dept_id_seq;
CREATE TABLE emp_dept (
id INTEGER PRIMARY KEY DEFAULT nextval('emp_dept_id_seq'),
dept_id INTEGER NOT NULL,
emp_id INTEGER NOT NULL,
FOREIGN KEY (dept_id) REFERENCES departments(id),
FOREIGN KEY (emp_id) REFERENCES employees(id)
);
INSERT INTO emp_dept(emp_id,dept_id) VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6);
INSERT INTO emp_dept(emp_id,dept_id) VALUES (9,7);
CREATE SEQUENCE product_id_seq;
CREATE TABLE products (
id INTEGER PRIMARY KEY DEFAULT nextval('product_id_seq'),
name VARCHAR NOT NULL,
price DECIMAL(10, 2),
discounted_price DECIMAL(10, 2) GENERATED ALWAYS AS (price * 0.9) VIRTUAL
);
CREATE SEQUENCE orders_id_seq;
CREATE TABLE orders (
id INTEGER PRIMARY KEY DEFAULT nextval('orders_id_seq'),
customer_name VARCHAR,
items INTEGER[],
shipping_address STRUCT(
street VARCHAR,
city VARCHAR,
zip VARCHAR
)
);
INSERT INTO orders (customer_name, items, shipping_address) VALUES
('John Doe', [1, 2, 3], {'street': '123 Elm St', 'city': 'Springfield', 'zip': '11111'}),
('Jane Smith', [3, 4, 5], {'street': '456 Oak St', 'city': 'Greenville', 'zip': '22222'}),
('Emily Johnson', [6, 7, 8, 9], {'street': '789 Pine St', 'city': 'Fairview', 'zip': '33333'});
Query Orders
select * from orders;
select id,customer_name,items,shipping_address.city from orders;
select id,customer_name,items,shipping_address['city'] from orders;
select id,customer_name,shipping_address.* from orders;
-- Array
select id,customer_name,len(items) from orders;
select id,customer_name,list_contains(items,3) from orders;
select id,customer_name,list_distinct(items) from orders;
select id,customer_name,unnest(items),shipping_address.* from orders;
More Functions
https://duckdb.org/docs/sql/functions/list
select current_catalog(), current_schema();
-- Returns the name of the currently active catalog. Default is memory. -- Returns the name of the currently active schema. Default is main.