diff --git a/asciidoc/courses/importing-relational-to-graph/ad.adoc b/asciidoc/courses/importing-relational-to-graph/ad.adoc new file mode 100644 index 000000000..e69c7f803 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/ad.adoc @@ -0,0 +1,5 @@ +:page-ad-title: Learn how to import relational data into Neo4j with GraphAcademy +:page-ad-description: This 3-hours course explores the options for importing data into Neo4j. +:page-ad-link: https://graphacademy.neo4j.com/courses/importing-fundamentals/?ref=docs-ad-importing-fundamentals +:page-ad-underline-role: button +:page-ad-underline: Enroll for free \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/banner.png b/asciidoc/courses/importing-relational-to-graph/banner.png new file mode 100644 index 000000000..59951e47c Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/banner.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/course.adoc b/asciidoc/courses/importing-relational-to-graph/course.adoc new file mode 100644 index 000000000..f1d48cdf1 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/course.adoc @@ -0,0 +1,75 @@ += Importing Relational Data into Neo4j +:categories: beginners:4, start:4, data-analysis:4, reporting:4, software-development:4, foundation:4 +:status: active +:next: importing-cypher +:duration: 3 hours +:caption: Learn how to import relational SQL data into Neo4j +:usecase: blank-sandbox +:key-points: Migrating from relational to graph databases, Transforming SQL data models, Using Neo4j Data Importer, Working with PostgreSQL and Northwind + + +== Course Description + +Welcome to Importing Relational Data into Neo4j! + +In this course, you will learn how to migrate data from relational databases into Neo4j. You will work with the classic Northwind PostgreSQL database and transform it into a graph data model optimized for traversal queries. + +You will learn to: + +* Understand the fundamental differences between relational and graph data models. +* Analyze relational database schemas to identify entities, relationships, and properties. +* Use PostgreSQL and Postico or pgAdmin to explore and query relational data. +* Transform relational tables into graph nodes and relationships. +* Use the Neo4j Data Importer to import relational data into a Neo4j Aura instance. +* Set unique IDs, constraints, and indexes to ensure data quality and query performance. + +You will work hands-on with the Northwind database, a sample relational database representing a fictional company's sales data, and migrate it into a graph structure that you can query using Cypher. + + +=== Prerequisites + +Before taking this course, you should have an understanding of: + +* Graph and Neo4j fundamental concepts +* Basic Cypher queries +* Relational database concepts and SQL +* Graph data modeling principles + +Completing the following courses in GraphAcademy is recommended: + +* link:https://graphacademy.neo4j.com/courses/neo4j-fundamentals/[Neo4j Fundamentals^] +* link:https://graphacademy.neo4j.com/courses/cypher-fundamentals/[Cypher Fundamentals^] +* link:https://graphacademy.neo4j.com/courses/modeling-fundamentals/[Graph Data Modeling Fundamentals^] + +You will also need: + +* A Neo4j database - choose one of: +** **AuraDB Professional** (recommended) - No credit card required, includes Graph Data Science support and Data Importer +** **GraphAcademy Sandbox** (quick start) - Free temporary sandbox provided with this course for learning +** **Self-managed Neo4j** - Neo4j Desktop or Docker installation +* PostgreSQL installed (link:https://postgresapp.com/[Postgres.app^] for macOS or link:https://www.postgresql.org/download/[postgresql.org^]) +* Postico (macOS) or pgAdmin (Windows, Linux, macOS) - optional but recommended +* The Northwind database (instructions provided in the course) + + +=== Duration + +{duration} + + +=== What you will learn + +* The fundamental differences between relational and graph data models. +* How to analyze and understand relational database schemas. +* Techniques for mapping relational tables to graph nodes and relationships. +* How to extract data from PostgreSQL databases. +* How to use the Neo4j Data Importer to migrate relational data into a Neo4j Aura instance. +* Best practices for validating and querying your imported graph data. + + +[.includes] +== This course includes + +* [lessons]#16 lessons# +* [challenges]#1 hands-on challenge# +* [quizes]#20 quizzes to support your learning# diff --git a/asciidoc/courses/importing-relational-to-graph/data/northwind.sql b/asciidoc/courses/importing-relational-to-graph/data/northwind.sql new file mode 100644 index 000000000..70c2f605d --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/data/northwind.sql @@ -0,0 +1,6751 @@ +-- Following script has been tested in pgAdmin. +-- If you use ppScript, please following the command instruction + +-- Connect to another default database or test database; +-- Database: testdb; +-- Disconnect existing Northwind if you have created. + +DROP DATABASE IF EXISTS Northwind; + + + +CREATE DATABASE Northwind + WITH + owner = hho + encoding = 'UTF8' + tablespace = pg_default + lc_collate = 'en_AU.UTF-8' + lc_ctype = 'en_AU.UTF-8' + connection LIMIT = -1 + template template0; + + +-- Database: Northwind + +DROP TABLE IF EXISTS Category; + +CREATE TABLE Category + ( + categoryid SERIAL PRIMARY KEY NOT NULL, + categoryname VARCHAR (15) NOT NULL, + description TEXT NULL, + picture BYTEA NULL + ); + + +DROP TABLE IF EXISTS Region; + +CREATE TABLE Region + ( + regionid INT NOT NULL, + regiondescription VARCHAR (50) NOT NULL, + PRIMARY KEY ( regionid ) + ); + + +DROP TABLE IF EXISTS Territory; + +CREATE TABLE Territory + ( + territoryid VARCHAR (20) NOT NULL, + territorydescription VARCHAR (50) NOT NULL, + regionid INT NOT NULL, + PRIMARY KEY ( territoryid ) + ); + +DROP TABLE IF EXISTS CustomerCustomerDemographic; + +CREATE TABLE CustomerCustomerDemographic + ( + customerid VARCHAR (5) NOT NULL, + customertypeid VARCHAR (10) NOT NULL, + PRIMARY KEY ( customerid, customertypeid ) + ); + +DROP TABLE IF EXISTS CustomerDemographic; + +CREATE TABLE CustomerDemographic + ( + customertypeid VARCHAR (10) NOT NULL, + customerdesc TEXT NULL, + PRIMARY KEY ( customertypeid ) + ); + +DROP TABLE IF EXISTS Customer; + +CREATE TABLE Customer + ( + custid SERIAL PRIMARY KEY NOT NULL, + companyname VARCHAR (40) NOT NULL, + contactname VARCHAR (30) NULL, + contacttitle VARCHAR (30) NULL, + address VARCHAR (60) NULL, + city VARCHAR (15) NULL, + region VARCHAR (15) NULL, + postalcode VARCHAR (10) NULL, + country VARCHAR (15) NULL, + phone VARCHAR (24) NULL, + fax VARCHAR (24) NULL + -- PRIMARY KEY ( custid ) + ); + + +DROP TABLE IF EXISTS Employee; +CREATE TABLE Employee + ( + empid SERIAL PRIMARY KEY NOT NULL, + lastname VARCHAR (20) NOT NULL, + firstname VARCHAR (10) NOT NULL, + title VARCHAR (30) NULL, + titleofcourtesy VARCHAR (25) NULL, + birthdate TIMESTAMP NULL, + hiredate TIMESTAMP NULL, + address VARCHAR (60) NULL, + city VARCHAR (15) NULL, + region VARCHAR (15) NULL, + postalcode VARCHAR (10) NULL, + country VARCHAR (15) NULL, + phone VARCHAR (24) NULL, + extension VARCHAR (4) NULL, + photo BYTEA NULL, + notes TEXT NULL, + mgrid INT NULL, + photopath VARCHAR (255) NULL + -- PRIMARY KEY ( empid ) + ); + +DROP TABLE IF EXISTS EmployeeTerritory; +CREATE TABLE EmployeeTerritory + ( + employeeid INT NOT NULL, + territoryid VARCHAR (20) NOT NULL, + PRIMARY KEY ( employeeid, territoryid ) + ); + + + +DROP TABLE IF EXISTS Product; +CREATE TABLE Product + ( + productid SERIAL PRIMARY KEY NOT NULL, + productname VARCHAR (40) NOT NULL, + supplierid INT NULL, + categoryid INT NULL, + quantityperunit VARCHAR (20) NULL, + unitprice DECIMAL(10, 2) NULL, + unitsinstock SMALLINT NULL, + unitsonorder SMALLINT NULL, + reorderlevel SMALLINT NULL, + discontinued CHAR(1) NOT NULL + ); + + +DROP TABLE IF EXISTS Shipper; +CREATE TABLE Shipper + ( + shipperid SERIAL NOT NULL, + companyname VARCHAR (40) NOT NULL, + phone VARCHAR (44) NULL, + PRIMARY KEY ( shipperid ) + ); + +DROP TABLE IF EXISTS Supplier; +CREATE TABLE Supplier + ( + supplierid SERIAL PRIMARY KEY NOT NULL, + companyname VARCHAR (40) NOT NULL, + contactname VARCHAR (30) NULL, + contacttitle VARCHAR (30) NULL, + address VARCHAR (60) NULL, + city VARCHAR (15) NULL, + region VARCHAR (15) NULL, + postalcode VARCHAR (10) NULL, + country VARCHAR (15) NULL, + phone VARCHAR (24) NULL, + fax VARCHAR (24) NULL, + homepage TEXT NULL + ); + + +DROP TABLE IF EXISTS SalesOrder; +CREATE TABLE SalesOrder + ( + orderid SERIAL NOT NULL, + custid VARCHAR (15) NULL, + empid INT NULL, + orderdate TIMESTAMP NULL, + requireddate TIMESTAMP NULL, + shippeddate TIMESTAMP NULL, + shipperid INT NULL, + freight DECIMAL(10, 2) NULL, + shipname VARCHAR (40) NULL, + shipaddress VARCHAR (60) NULL, + shipcity VARCHAR (15) NULL, + shipregion VARCHAR (15) NULL, + shippostalcode VARCHAR (10) NULL, + shipcountry VARCHAR (15) NULL, + PRIMARY KEY ( orderid ) + ); + +DROP TABLE IF EXISTS OrderDetail; +CREATE TABLE OrderDetail + ( + orderid INT NOT NULL, + productid INT NOT NULL, + unitprice DECIMAL(10, 2) NOT NULL, + qty SMALLINT NOT NULL, + discount DECIMAL(10, 2) NOT NULL + ); + + + + +-- Populate Employess table + + +INSERT INTO Employee(empid, lastname, firstname, title, titleofcourtesy, birthdate, hiredate, address, city, region, postalcode, country, phone, mgrid) + VALUES(1, N'Davis', N'Sara', N'CEO', N'Ms.', '19581208 00:00:00.000', '20020501 00:00:00.000', N'7890 - 20th Ave. E., Apt. 2A', N'Seattle', N'WA', N'10003', N'USA', N'(206) 555-0101', NULL); +INSERT INTO Employee(empid, lastname, firstname, title, titleofcourtesy, birthdate, hiredate, address, city, region, postalcode, country, phone, mgrid) + VALUES(2, N'Funk', N'Don', N'Vice President, Sales', N'Dr.', '19620219 00:00:00.000', '20020814 00:00:00.000', N'9012 W. Capital Way', N'Tacoma', N'WA', N'10001', N'USA', N'(206) 555-0100', 1); +INSERT INTO Employee(empid, lastname, firstname, title, titleofcourtesy, birthdate, hiredate, address, city, region, postalcode, country, phone, mgrid) + VALUES(3, N'Lew', N'Judy', N'Sales Manager', N'Ms.', '19730830 00:00:00.000', '20020401 00:00:00.000', N'2345 Moss Bay Blvd.', N'Kirkland', N'WA', N'10007', N'USA', N'(206) 555-0103', 2); +INSERT INTO Employee(empid, lastname, firstname, title, titleofcourtesy, birthdate, hiredate, address, city, region, postalcode, country, phone, mgrid) + VALUES(4, N'Peled', N'Yael', N'Sales Representative', N'Mrs.', '19470919 00:00:00.000', '20030503 00:00:00.000', N'5678 Old Redmond Rd.', N'Redmond', N'WA', N'10009', N'USA', N'(206) 555-0104', 3); +INSERT INTO Employee(empid, lastname, firstname, title, titleofcourtesy, birthdate, hiredate, address, city, region, postalcode, country, phone, mgrid) + VALUES(5, N'Buck', N'Sven', N'Sales Manager', N'Mr.', '19650304 00:00:00.000', '20031017 00:00:00.000', N'8901 Garrett Hill', N'London', NULL, N'10004', N'UK', N'(71) 234-5678', 2); +INSERT INTO Employee(empid, lastname, firstname, title, titleofcourtesy, birthdate, hiredate, address, city, region, postalcode, country, phone, mgrid) + VALUES(6, N'Suurs', N'Paul', N'Sales Representative', N'Mr.', '19730702 00:00:00.000', '20031017 00:00:00.000', N'3456 Coventry House, Miner Rd.', N'London', NULL, N'10005', N'UK', N'(71) 345-6789', 5); +INSERT INTO Employee(empid, lastname, firstname, title, titleofcourtesy, birthdate, hiredate, address, city, region, postalcode, country, phone, mgrid) + VALUES(7, N'King', N'Russell', N'Sales Representative', N'Mr.', '19700529 00:00:00.000', '20040102 00:00:00.000', N'6789 Edgeham Hollow, Winchester Way', N'London', NULL, N'10002', N'UK', N'(71) 123-4567', 5); +INSERT INTO Employee(empid, lastname, firstname, title, titleofcourtesy, birthdate, hiredate, address, city, region, postalcode, country, phone, mgrid) + VALUES(8, N'Cameron', N'Maria', N'Sales Representative', N'Ms.', '19680109 00:00:00.000', '20040305 00:00:00.000', N'4567 - 11th Ave. N.E.', N'Seattle', N'WA', N'10006', N'USA', N'(206) 555-0102', 3); +INSERT INTO Employee(empid, lastname, firstname, title, titleofcourtesy, birthdate, hiredate, address, city, region, postalcode, country, phone, mgrid) + VALUES(9, N'Dolgopyatova', N'Zoya', N'Sales Representative', N'Ms.', '19760127 00:00:00.000', '20041115 00:00:00.000', N'1234 Houndstooth Rd.', N'London', NULL, N'10008', N'UK', N'(71) 456-7890', 5); + +-- --- Populate Supplier + +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(1, N'Supplier SWRXU', N'Adolphi, Stephan', N'Purchasing Manager', N'2345 Gilbert St.', N'London', NULL, N'10023', N'UK', N'(171) 456-7890', NULL); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(2, N'Supplier VHQZD', N'Hance, Jim', N'Order Administrator', N'P.O. Box 5678', N'New Orleans', N'LA', N'10013', N'USA', N'(100) 555-0111', NULL); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(3, N'Supplier STUAZ', N'Parovszky, Alfons', N'Sales Representative', N'1234 Oxford Rd.', N'Ann Arbor', N'MI', N'10026', N'USA', N'(313) 555-0109', N'(313) 555-0112'); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(4, N'Supplier QOVFD', N'Balázs, Erzsébet', N'Marketing Manager', N'7890 Sekimai Musashino-shi', N'Tokyo', NULL, N'10011', N'Japan', N'(03) 6789-0123', NULL); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(5, N'Supplier EQPNC', N'Holm, Michael', N'Export Administrator', N'Calle del Rosal 4567', N'Oviedo', N'Asturias', N'10029', N'Spain', N'(98) 123 45 67', NULL); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(6, N'Supplier QWUSF', N'Popkova, Darya', N'Marketing Representative', N'8901 Setsuko Chuo-ku', N'Osaka', NULL, N'10028', N'Japan', N'(06) 789-0123', NULL); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(7, N'Supplier GQRCV', N'Ræbild, Jesper', N'Marketing Manager', N'5678 Rose St. Moonie Ponds', N'Melbourne', N'Victoria', N'10018', N'Australia', N'(03) 123-4567', N'(03) 456-7890'); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(8, N'Supplier BWGYE', N'Iallo, Lucio', N'Sales Representative', N'9012 King''s Way', N'Manchester', NULL, N'10021', N'UK', N'(161) 567-8901', NULL); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(9, N'Supplier QQYEU', N'Basalik, Evan', N'Sales Agent', N'Kaloadagatan 4567', N'Göteborg', NULL, N'10022', N'Sweden', N'031-345 67 89', N'031-678 90 12'); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(10, N'Supplier UNAHG', N'Barnett, Dave', N'Marketing Manager', N'Av. das Americanas 2345', N'Sao Paulo', NULL, N'10034', N'Brazil', N'(11) 345 6789', NULL); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(11, N'Supplier ZPYVS', N'Jain, Mukesh', N'Sales Manager', N'Tiergartenstraße 3456', N'Berlin', NULL, N'10016', N'Germany', N'(010) 3456789', NULL); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(12, N'Supplier SVIYA', N'Regev, Barak', N'International Marketing Mgr.', N'Bogenallee 9012', N'Frankfurt', NULL, N'10024', N'Germany', N'(069) 234567', NULL); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(13, N'Supplier TEGSC', N'Brehm, Peter', N'Coordinator Foreign Markets', N'Frahmredder 3456', N'Cuxhaven', NULL, N'10019', N'Germany', N'(04721) 1234', N'(04721) 2345'); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(14, N'Supplier KEREV', N'Keil, Kendall', N'Sales Representative', N'Viale Dante, 6789', N'Ravenna', NULL, N'10015', N'Italy', N'(0544) 56789', N'(0544) 34567'); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(15, N'Supplier NZLIF', N'Sałas-Szlejter, Karolina', N'Marketing Manager', N'Hatlevegen 1234', N'Sandvika', NULL, N'10025', N'Norway', N'(0)9-012345', NULL); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(16, N'Supplier UHZRG', N'Scholl, Thorsten', N'Regional Account Rep.', N'8901 - 8th Avenue Suite 210', N'Bend', N'OR', N'10035', N'USA', N'(503) 555-0108', NULL); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(17, N'Supplier QZGUF', N'Kleinerman, Christian', N'Sales Representative', N'Brovallavägen 0123', N'Stockholm', NULL, N'10033', N'Sweden', N'08-234 56 78', NULL); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(18, N'Supplier LVJUA', N'Canel, Fabrice', N'Sales Manager', N'3456, Rue des Francs-Bourgeois', N'Paris', NULL, N'10031', N'France', N'(1) 90.12.34.56', N'(1) 01.23.45.67'); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(19, N'Supplier JDNUG', N'Chapman, Greg', N'Wholesale Account Agent', N'Order Processing Dept. 7890 Paul Revere Blvd.', N'Boston', N'MA', N'10027', N'USA', N'(617) 555-0110', N'(617) 555-0113'); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(20, N'Supplier CIYNM', N'Köszegi, Emília', N'Owner', N'6789 Serangoon Loop, Suite #402', N'Singapore', NULL, N'10037', N'Singapore', N'012-3456', NULL); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(21, N'Supplier XOXZA', N'Shakespear, Paul', N'Sales Manager', N'Lyngbysild Fiskebakken 9012', N'Lyngby', NULL, N'10012', N'Denmark', N'67890123', N'78901234'); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(22, N'Supplier FNUXM', N'Skelly, Bonnie L.', N'Accounting Manager', N'Verkoop Rijnweg 8901', N'Zaandam', NULL, N'10014', N'Netherlands', N'(12345) 8901', N'(12345) 5678'); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(23, N'Supplier ELCRN', N'LaMee, Brian', N'Product Manager', N'Valtakatu 1234', N'Lappeenranta', NULL, N'10032', N'Finland', N'(953) 78901', NULL); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(24, N'Supplier JNNES', N'Clark, Molly', N'Sales Representative', N'6789 Prince Edward Parade Hunter''s Hill', N'Sydney', N'NSW', N'10030', N'Australia', N'(02) 234-5678', N'(02) 567-8901'); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(25, N'Supplier ERVYZ', N'Sprenger, Christof', N'Marketing Manager', N'7890 Rue St. Laurent', N'Montréal', N'Québec', N'10017', N'Canada', N'(514) 456-7890', NULL); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(26, N'Supplier ZWZDM', N'Cunha, Gonçalo', N'Order Administrator', N'Via dei Gelsomini, 5678', N'Salerno', NULL, N'10020', N'Italy', N'(089) 4567890', N'(089) 4567890'); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(27, N'Supplier ZRYDZ', N'Leoni, Alessandro', N'Sales Manager', N'4567, rue H. Voiron', N'Montceau', NULL, N'10036', N'France', N'89.01.23.45', NULL); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(28, N'Supplier OAVQT', N'Teper, Jeff', N'Sales Representative', N'Bat. B 2345, rue des Alpes', N'Annecy', NULL, N'10010', N'France', N'01.23.45.67', N'89.01.23.45'); +INSERT INTO Supplier(supplierid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(29, N'Supplier OGLRK', N'Walters, Rob', N'Accounting Manager', N'0123 rue Chasseur', N'Ste-Hyacinthe', N'Québec', N'10009', N'Canada', N'(514) 567-890', N'(514) 678-9012'); + + +-- Category table + + +INSERT INTO Category(categoryid, categoryname, description) + VALUES(1, N'Beverages', N'Soft drinks, coffees, teas, beers, and ales'); +INSERT INTO Category(categoryid, categoryname, description) + VALUES(2, N'Condiments', N'Sweet and savory sauces, relishes, spreads, and seasonings'); +INSERT INTO Category(categoryid, categoryname, description) + VALUES(3, N'Confections', N'Desserts, candies, and sweet breads'); +INSERT INTO Category(categoryid, categoryname, description) + VALUES(4, N'Dairy Product', N'Cheeses'); +INSERT INTO Category(categoryid, categoryname, description) + VALUES(5, N'Grains/Cereals', N'Breads, crackers, pasta, and cereal'); +INSERT INTO Category(categoryid, categoryname, description) + VALUES(6, N'Meat/Poultry', N'Prepared meats'); +INSERT INTO Category(categoryid, categoryname, description) + VALUES(7, N'Produce', N'Dried fruit and bean curd'); +INSERT INTO Category(categoryid, categoryname, description) + VALUES(8, N'Seafood', N'Seaweed and fish'); + + +-- Populate table Product + +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(1, N'Product HHYDP', 1, 1, 18.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(2, N'Product RECZE', 1, 1, 19.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(3, N'Product IMEHJ', 1, 2, 10.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(4, N'Product KSBRM', 2, 2, 22.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(5, N'Product EPEIM', 2, 2, 21.35, 1); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(6, N'Product VAIIV', 3, 2, 25.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(7, N'Product HMLNI', 3, 7, 30.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(8, N'Product WVJFP', 3, 2, 40.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(9, N'Product AOZBW', 4, 6, 97.00, 1); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(10, N'Product YHXGE', 4, 8, 31.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(11, N'Product QMVUN', 5, 4, 21.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(12, N'Product OSFNS', 5, 4, 38.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(13, N'Product POXFU', 6, 8, 6.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(14, N'Product PWCJB', 6, 7, 23.25, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(15, N'Product KSZOI', 6, 2, 15.50, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(16, N'Product PAFRH', 7, 3, 17.45, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(17, N'Product BLCAX', 7, 6, 39.00, 1); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(18, N'Product CKEDC', 7, 8, 62.50, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(19, N'Product XKXDO', 8, 3, 9.20, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(20, N'Product QHFFP', 8, 3, 81.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(21, N'Product VJZZH', 8, 3, 10.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(22, N'Product CPHFY', 9, 5, 21.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(23, N'Product JLUDZ', 9, 5, 9.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(24, N'Product QOGNU', 10, 1, 4.50, 1); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(25, N'Product LYLNI', 11, 3, 14.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(26, N'Product HLGZA', 11, 3, 31.23, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(27, N'Product SMIOH', 11, 3, 43.90, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(28, N'Product OFBNT', 12, 7, 45.60, 1); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(29, N'Product VJXYN', 12, 6, 123.79, 1); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(30, N'Product LYERX', 13, 8, 25.89, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(31, N'Product XWOXC', 14, 4, 12.50, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(32, N'Product NUNAW', 14, 4, 32.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(33, N'Product ASTMN', 15, 4, 2.50, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(34, N'Product SWNJY', 16, 1, 14.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(35, N'Product NEVTJ', 16, 1, 18.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(36, N'Product GMKIJ', 17, 8, 19.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(37, N'Product EVFFA', 17, 8, 26.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(38, N'Product QDOMO', 18, 1, 263.50, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(39, N'Product LSOFL', 18, 1, 18.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(40, N'Product YZIXQ', 19, 8, 18.40, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(41, N'Product TTEEX', 19, 8, 9.65, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(42, N'Product RJVNM', 20, 5, 14.00, 1); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(43, N'Product ZZZHR', 20, 1, 46.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(44, N'Product VJIEO', 20, 2, 19.45, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(45, N'Product AQOKR', 21, 8, 9.50, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(46, N'Product CBRRL', 21, 8, 12.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(47, N'Product EZZPR', 22, 3, 9.50, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(48, N'Product MYNXN', 22, 3, 12.75, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(49, N'Product FPYPN', 23, 3, 20.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(50, N'Product BIUDV', 23, 3, 16.25, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(51, N'Product APITJ', 24, 7, 53.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(52, N'Product QSRXF', 24, 5, 7.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(53, N'Product BKGEA', 24, 6, 32.80, 1); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(54, N'Product QAQRL', 25, 6, 7.45, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(55, N'Product YYWRT', 25, 6, 24.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(56, N'Product VKCMF', 26, 5, 38.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(57, N'Product OVLQI', 26, 5, 19.50, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(58, N'Product ACRVI', 27, 8, 13.25, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(59, N'Product UKXRI', 28, 4, 55.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(60, N'Product WHBYK', 28, 4, 34.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(61, N'Product XYZPE', 29, 2, 28.50, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(62, N'Product WUXYK', 29, 3, 49.30, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(63, N'Product ICKNK', 7, 2, 43.90, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(64, N'Product HCQDE', 12, 5, 33.25, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(65, N'Product XYWBZ', 2, 2, 21.05, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(66, N'Product LQMGN', 2, 2, 17.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(67, N'Product XLXQF', 16, 1, 14.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(68, N'Product TBTBL', 8, 3, 12.50, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(69, N'Product COAXA', 15, 4, 36.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(70, N'Product TOONT', 7, 1, 15.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(71, N'Product MYMOI', 15, 4, 21.50, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(72, N'Product GEEOO', 14, 4, 34.80, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(73, N'Product WEUJZ', 17, 8, 15.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(74, N'Product BKAZJ', 4, 7, 10.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(75, N'Product BWRLG', 12, 1, 7.75, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(76, N'Product JYGFE', 23, 1, 18.00, 0); +INSERT INTO Product(productid, productname, supplierid, categoryid, unitprice, discontinued) + VALUES(77, N'Product LUNZZ', 12, 2, 13.00, 0); + + +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(1, N'Customer NRZBB', N'Allen, Michael', N'Sales Representative', N'Obere Str. 0123', N'Berlin', NULL, N'10092', N'Germany', N'030-3456789', N'030-0123456'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(2, N'Customer MLTDN', N'Hassall, Mark', N'Owner', N'Avda. de la Constitución 5678', N'México D.F.', NULL, N'10077', N'Mexico', N'(5) 789-0123', N'(5) 456-7890'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(3, N'Customer KBUDE', N'Peoples, John', N'Owner', N'Mataderos 7890', N'México D.F.', NULL, N'10097', N'Mexico', N'(5) 123-4567', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(4, N'Customer HFBZG', N'Arndt, Torsten', N'Sales Representative', N'7890 Hanover Sq.', N'London', NULL, N'10046', N'UK', N'(171) 456-7890', N'(171) 456-7891'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(5, N'Customer HGVLZ', N'Higginbotham, Tom', N'Order Administrator', N'Berguvsvägen 5678', N'Luleå', NULL, N'10112', N'Sweden', N'0921-67 89 01', N'0921-23 45 67'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(6, N'Customer XHXJV', N'Poland, Carole', N'Sales Representative', N'Forsterstr. 7890', N'Mannheim', NULL, N'10117', N'Germany', N'0621-67890', N'0621-12345'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(7, N'Customer QXVLA', N'Bansal, Dushyant', N'Marketing Manager', N'2345, place Kléber', N'Strasbourg', NULL, N'10089', N'France', N'67.89.01.23', N'67.89.01.24'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(8, N'Customer QUHWH', N'Ilyina, Julia', N'Owner', N'C/ Araquil, 0123', N'Madrid', NULL, N'10104', N'Spain', N'(91) 345 67 89', N'(91) 012 34 56'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(9, N'Customer RTXGC', N'Raghav, Amritansh', N'Owner', N'6789, rue des Bouchers', N'Marseille', NULL, N'10105', N'France', N'23.45.67.89', N'23.45.67.80'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(10, N'Customer EEALV', N'Bassols, Pilar Colome', N'Accounting Manager', N'8901 Tsawassen Blvd.', N'Tsawassen', N'BC', N'10111', N'Canada', N'(604) 901-2345', N'(604) 678-9012'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(11, N'Customer UBHAU', N'Jaffe, David', N'Sales Representative', N'Fauntleroy Circus 4567', N'London', NULL, N'10064', N'UK', N'(171) 789-0123', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(12, N'Customer PSNMQ', N'Ray, Mike', N'Sales Agent', N'Cerrito 3456', N'Buenos Aires', NULL, N'10057', N'Argentina', N'(1) 890-1234', N'(1) 567-8901'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(13, N'Customer VMLOG', N'Benito, Almudena', N'Marketing Manager', N'Sierras de Granada 7890', N'México D.F.', NULL, N'10056', N'Mexico', N'(5) 456-7890', N'(5) 123-4567'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(14, N'Customer WNMAF', N'Jelitto, Jacek', N'Owner', N'Hauptstr. 0123', N'Bern', NULL, N'10065', N'Switzerland', N'0452-678901', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(15, N'Customer JUWXK', N'Richardson, Shawn', N'Sales Associate', N'Av. dos Lusíadas, 6789', N'Sao Paulo', N'SP', N'10087', N'Brazil', N'(11) 012-3456', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(16, N'Customer GYBBY', N'Birkby, Dana', N'Sales Representative', N'Berkeley Gardens 0123 Brewery', N'London', NULL, N'10039', N'UK', N'(171) 234-5678', N'(171) 234-5679'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(17, N'Customer FEVNN', N'Jones, TiAnna', N'Order Administrator', N'Walserweg 4567', N'Aachen', NULL, N'10067', N'Germany', N'0241-789012', N'0241-345678'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(18, N'Customer BSVAR', N'Rizaldy, Arif', N'Owner', N'3456, rue des Cinquante Otages', N'Nantes', NULL, N'10041', N'France', N'89.01.23.45', N'89.01.23.46'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(19, N'Customer RFNQC', N'Boseman, Randall', N'Sales Agent', N'5678 King George', N'London', NULL, N'10110', N'UK', N'(171) 345-6789', N'(171) 345-6780'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(20, N'Customer THHDP', N'Kane, John', N'Sales Manager', N'Kirchgasse 9012', N'Graz', NULL, N'10059', N'Austria', N'1234-5678', N'9012-3456'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(21, N'Customer KIDPX', N'Russo, Giuseppe', N'Marketing Assistant', N'Rua Orós, 3456', N'Sao Paulo', N'SP', N'10096', N'Brazil', N'(11) 456-7890', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(22, N'Customer DTDMN', N'Bueno, Janaina Burdan, Neville', N'Accounting Manager', N'C/ Moralzarzal, 5678', N'Madrid', NULL, N'10080', N'Spain', N'(91) 890 12 34', N'(91) 567 89 01'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(23, N'Customer WVFAF', N'Khanna, Karan', N'Assistant Sales Agent', N'4567, chaussée de Tournai', N'Lille', NULL, N'10048', N'France', N'45.67.89.01', N'45.67.89.02'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(24, N'Customer CYZTN', N'San Juan, Patricia', N'Owner', N'Åkergatan 5678', N'Bräcke', NULL, N'10114', N'Sweden', N'0695-67 89 01', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(25, N'Customer AZJED', N'Carlson, Jason', N'Marketing Manager', N'Berliner Platz 9012', N'München', NULL, N'10091', N'Germany', N'089-8901234', N'089-5678901'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(26, N'Customer USDBG', N'Koch, Paul', N'Marketing Manager', N'9012, rue Royale', N'Nantes', NULL, N'10101', N'France', N'34.56.78.90', N'34.56.78.91'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(27, N'Customer WMFEA', N'Schmöllerl, Martin', N'Sales Representative', N'Via Monte Bianco 4567', N'Torino', NULL, N'10099', N'Italy', N'011-2345678', N'011-9012345'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(28, N'Customer XYUFB', N'Cavaglieri, Giorgio', N'Sales Manager', N'Jardim das rosas n. 8901', N'Lisboa', NULL, N'10054', N'Portugal', N'(1) 456-7890', N'(1) 123-4567'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(29, N'Customer MDLWA', N'Kolesnikova, Katerina', N'Marketing Manager', N'Rambla de Cataluña, 8901', N'Barcelona', NULL, N'10081', N'Spain', N'(93) 789 0123', N'(93) 456 7890'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(30, N'Customer KSLQF', N'Shabalin, Rostislav', N'Sales Manager', N'C/ Romero, 1234', N'Sevilla', NULL, N'10075', N'Spain', N'(95) 901 23 45', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(31, N'Customer YJCBX', N'Cheng, Yao-Qiang', N'Sales Associate', N'Av. Brasil, 5678', N'Campinas', N'SP', N'10128', N'Brazil', N'(11) 567-8901', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(32, N'Customer YSIQX', N'Krishnan, Venky', N'Marketing Manager', N'6789 Baker Blvd.', N'Eugene', N'OR', N'10070', N'USA', N'(503) 555-0122', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(33, N'Customer FVXPQ', N'Sigurdarson, Hallur ', N'Owner', N'5ª Ave. Los Palos Grandes 3456', N'Caracas', N'DF', N'10043', N'Venezuela', N'(2) 789-0123', N'(2) 456-7890'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(34, N'Customer IBVRG', N'Cohen, Shy', N'Accounting Manager', N'Rua do Paço, 7890', N'Rio de Janeiro', N'RJ', N'10076', N'Brazil', N'(21) 789-0123', N'(21) 789-0124'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(35, N'Customer UMTLM', N'Langohr, Kris', N'Sales Representative', N'Carrera 1234 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10066', N'Venezuela', N'(5) 567-8901', N'(5) 234-5678'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(36, N'Customer LVJSO', N'Smith, Denise', N'Sales Representative', N'City Center Plaza 2345 Main St.', N'Elgin', N'OR', N'10103', N'USA', N'(503) 555-0126', N'(503) 555-0135'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(37, N'Customer FRXZL', N'Crăciun, Ovidiu V.', N'Sales Associate', N'9012 Johnstown Road', N'Cork', N'Co. Cork', N'10051', N'Ireland', N'8901 234', N'5678 9012'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(38, N'Customer LJUCA', N'Lee, Frank', N'Marketing Manager', N'Garden House Crowther Way 3456', N'Cowes', N'Isle of Wight', N'10063', N'UK', N'(198) 567-8901', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(39, N'Customer GLLAG', N'Song, Lolan', N'Sales Associate', N'Maubelstr. 8901', N'Brandenburg', NULL, N'10060', N'Germany', N'0555-34567', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(40, N'Customer EFFTC', N'De Oliveira, Jose', N'Sales Representative', N'2345, avenue de l''Europe', N'Versailles', NULL, N'10108', N'France', N'12.34.56.78', N'12.34.56.79'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(41, N'Customer XIIWM', N'Litton, Tim', N'Sales Manager', N'3456 rue Alsace-Lorraine', N'Toulouse', NULL, N'10053', N'France', N'90.12.34.56', N'90.12.34.57'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(42, N'Customer IAIJK', N'Steiner, Dominik', N'Marketing Assistant', N'2345 Oak St.', N'Vancouver', N'BC', N'10098', N'Canada', N'(604) 567-8901', N'(604) 234-5678'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(43, N'Customer UISOJ', N'Deshpande, Anu', N'Marketing Manager', N'8901 Orchestra Terrace', N'Walla Walla', N'WA', N'10069', N'USA', N'(509) 555-0119', N'(509) 555-0130'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(44, N'Customer OXFRU', N'Louverdis, George', N'Sales Representative', N'Magazinweg 8901', N'Frankfurt a.M.', NULL, N'10095', N'Germany', N'069-7890123', N'069-4567890'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(45, N'Customer QXPPT', N'Sunkammurali, Krishna', N'Owner', N'1234 Polk St. Suite 5', N'San Francisco', N'CA', N'10062', N'USA', N'(415) 555-0118', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(46, N'Customer XPNIK', N'Dressler, Marlies', N'Accounting Manager', N'Carrera 7890 con Ave. Bolívar #65-98 Llano Largo', N'Barquisimeto', N'Lara', N'10093', N'Venezuela', N'(9) 789-0123', N'(9) 456-7890'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(47, N'Customer PSQUZ', N'Lupu, Cornel', N'Owner', N'Ave. 5 de Mayo Porlamar 5678', N'I. de Margarita', N'Nueva Esparta', N'10121', N'Venezuela', N'(8) 01-23-45', N'(8) 67-89-01'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(48, N'Customer DVFMB', N'Szymczak, Radosław', N'Sales Manager', N'9012 Chiaroscuro Rd.', N'Portland', N'OR', N'10073', N'USA', N'(503) 555-0117', N'(503) 555-0129'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(49, N'Customer CQRAA', N'Duerr, Bernard', N'Marketing Manager', N'Via Ludovico il Moro 6789', N'Bergamo', NULL, N'10106', N'Italy', N'035-345678', N'035-901234'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(50, N'Customer JYPSC', N'Mace, Donald', N'Sales Agent', N'Rue Joseph-Bens 0123', N'Bruxelles', NULL, N'10074', N'Belgium', N'(02) 890 12 34', N'(02) 567 89 01'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(51, N'Customer PVDZC', N'Taylor, Maurice', N'Marketing Assistant', N'8901 rue St. Laurent', N'Montréal', N'Québec', N'10040', N'Canada', N'(514) 345-6789', N'(514) 012-3456'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(52, N'Customer PZNLA', N'Dupont-Roc, Patrice', N'Marketing Assistant', N'Heerstr. 4567', N'Leipzig', NULL, N'10125', N'Germany', N'0342-12345', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(53, N'Customer GCJSG', N'Mallit, Ken', N'Sales Associate', N'South House 1234 Queensbridge', N'London', NULL, N'10061', N'UK', N'(171) 890-1234', N'(171) 890-1235'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(54, N'Customer TDKEG', N'Tiano, Mike', N'Sales Agent', N'Ing. Gustavo Moncada 0123 Piso 20-A', N'Buenos Aires', NULL, N'10094', N'Argentina', N'(1) 123-4567', N'(1) 890-1234'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(55, N'Customer KZQZT', N'Egelund-Muller, Anja', N'Sales Representative', N'7890 Bering St.', N'Anchorage', N'AK', N'10050', N'USA', N'(907) 555-0115', N'(907) 555-0128'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(56, N'Customer QNIVZ', N'Marinova, Nadejda', N'Owner', N'Mehrheimerstr. 9012', N'Köln', NULL, N'10047', N'Germany', N'0221-0123456', N'0221-7890123'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(57, N'Customer WVAXS', N'Tollevsen, Bjørn', N'Owner', N'5678, boulevard Charonne', N'Paris', NULL, N'10085', N'France', N'(1) 89.01.23.45', N'(1) 89.01.23.46'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(58, N'Customer AHXHT', N'Fakhouri, Fadi', N'Sales Representative', N'Calle Dr. Jorge Cash 8901', N'México D.F.', NULL, N'10116', N'Mexico', N'(5) 890-1234', N'(5) 567-8901'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(59, N'Customer LOLJO', N'Meston, Tosh', N'Sales Manager', N'Geislweg 2345', N'Salzburg', NULL, N'10127', N'Austria', N'4567-8901', N'2345-6789'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(60, N'Customer QZURI', N'Uppal, Sunil', N'Sales Representative', N'Estrada da saúde n. 6789', N'Lisboa', NULL, N'10083', N'Portugal', N'(1) 789-0123', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(61, N'Customer WULWD', N'Florczyk, Krzysztof', N'Accounting Manager', N'Rua da Panificadora, 1234', N'Rio de Janeiro', N'RJ', N'10115', N'Brazil', N'(21) 678-9012', N'(21) 678-9013'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(62, N'Customer WFIZJ', N'Misiec, Anna', N'Marketing Assistant', N'Alameda dos Canàrios, 1234', N'Sao Paulo', N'SP', N'10102', N'Brazil', N'(11) 901-2345', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(63, N'Customer IRRVL', N'Veronesi, Giorgio', N'Accounting Manager', N'Taucherstraße 1234', N'Cunewalde', NULL, N'10126', N'Germany', N'0372-12345', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(64, N'Customer LWGMD', N'Gaffney, Lawrie', N'Sales Representative', N'Av. del Libertador 3456', N'Buenos Aires', NULL, N'10124', N'Argentina', N'(1) 234-5678', N'(1) 901-2345'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(65, N'Customer NYUHS', N'Moore, Michael', N'Assistant Sales Representative', N'6789 Milton Dr.', N'Albuquerque', N'NM', N'10109', N'USA', N'(505) 555-0125', N'(505) 555-0134'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(66, N'Customer LHANT', N'Voss, Florian', N'Sales Associate', N'Strada Provinciale 7890', N'Reggio Emilia', NULL, N'10038', N'Italy', N'0522-012345', N'0522-678901'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(67, N'Customer QVEPD', N'Garden, Euan', N'Assistant Sales Agent', N'Av. Copacabana, 6789', N'Rio de Janeiro', N'RJ', N'10052', N'Brazil', N'(21) 345-6789', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(68, N'Customer CCKOT', N'Myrcha, Jacek', N'Sales Manager', N'Grenzacherweg 0123', N'Genève', NULL, N'10122', N'Switzerland', N'0897-012345', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(69, N'Customer SIUIH', N'Watters, Jason M.', N'Accounting Manager', N'Gran Vía, 4567', N'Madrid', NULL, N'10071', N'Spain', N'(91) 567 8901', N'(91) 234 5678'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(70, N'Customer TMXGN', N'Ginters, Kaspars', N'Owner', N'Erling Skakkes gate 2345', N'Stavern', NULL, N'10123', N'Norway', N'07-89 01 23', N'07-45 67 89'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(71, N'Customer LCOUJ', N'Navarro, Tomás', N'Sales Representative', N'9012 Suffolk Ln.', N'Boise', N'ID', N'10078', N'USA', N'(208) 555-0116', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(72, N'Customer AHPOP', N'Welcker, Brian', N'Sales Manager', N'4567 Wadhurst Rd.', N'London', NULL, N'10088', N'UK', N'(171) 901-2345', N'(171) 901-2346'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(73, N'Customer JMIKW', N'Gonzalez, Nuria', N'Owner', N'Vinbæltet 3456', N'Kobenhavn', NULL, N'10079', N'Denmark', N'12 34 56 78', N'90 12 34 56'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(74, N'Customer YSHXL', N'O’Brien, Dave', N'Marketing Manager', N'9012, rue Lauriston', N'Paris', NULL, N'10058', N'France', N'(1) 23.45.67.89', N'(1) 23.45.67.80'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(75, N'Customer XOJYP', N'Wojciechowska, Agnieszka', N'Sales Manager', N'P.O. Box 1234', N'Lander', N'WY', N'10113', N'USA', N'(307) 555-0114', N'(307) 555-0127'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(76, N'Customer SFOGW', N'Gulbis, Katrin', N'Accounting Manager', N'Boulevard Tirou, 2345', N'Charleroi', NULL, N'10100', N'Belgium', N'(071) 56 78 90 12', N'(071) 34 56 78 90'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(77, N'Customer LCYBZ', N'Osorio, Cristian', N'Marketing Manager', N'2345 Jefferson Way Suite 2', N'Portland', N'OR', N'10042', N'USA', N'(503) 555-0120', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(78, N'Customer NLTYP', N'Young, Robin', N'Marketing Assistant', N'0123 Grizzly Peak Rd.', N'Butte', N'MT', N'10107', N'USA', N'(406) 555-0121', N'(406) 555-0131'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(79, N'Customer FAPSM', N'Wickham, Jim', N'Marketing Manager', N'Luisenstr. 0123', N'Münster', NULL, N'10118', N'Germany', N'0251-456789', N'0251-012345'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(80, N'Customer VONTK', N'Geschwandtner, Jens', N'Owner', N'Avda. Azteca 4567', N'México D.F.', NULL, N'10044', N'Mexico', N'(5) 678-9012', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(81, N'Customer YQQWW', N'Nagel, Jean-Philippe', N'Sales Representative', N'Av. Inês de Castro, 1234', N'Sao Paulo', N'SP', N'10120', N'Brazil', N'(11) 123-4567', N'(11) 234-5678'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(82, N'Customer EYHKM', N'Veninga, Tjeerd', N'Sales Associate', N'1234 DaVinci Blvd.', N'Kirkland', N'WA', N'10119', N'USA', N'(206) 555-0124', N'(206) 555-0133'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(83, N'Customer ZRNDE', N'Fonteneau, Karl', N'Sales Manager', N'Smagsloget 3456', N'Århus', NULL, N'10090', N'Denmark', N'23 45 67 89', N'01 23 45 67'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(84, N'Customer NRCSK', N'Tuntisangaroon, Sittichai', N'Sales Agent', N'6789, rue du Commerce', N'Lyon', NULL, N'10072', N'France', N'78.90.12.34', N'78.90.12.35'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(85, N'Customer ENQZT', N'McLin, Nkenge', N'Accounting Manager', N'5678 rue de l''Abbaye', N'Reims', NULL, N'10082', N'France', N'56.78.90.12', N'56.78.90.13'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(86, N'Customer SNXOJ', N'Syamala, Manoj', N'Sales Representative', N'Adenauerallee 7890', N'Stuttgart', NULL, N'10086', N'Germany', N'0711-345678', N'0711-901234'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(87, N'Customer ZHYOS', N'Ludwig, Michael', N'Accounting Manager', N'Torikatu 9012', N'Oulu', NULL, N'10045', N'Finland', N'981-123456', N'981-789012'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(88, N'Customer SRQVM', N'Li, Yan', N'Sales Manager', N'Rua do Mercado, 4567', N'Resende', N'SP', N'10084', N'Brazil', N'(14) 234-5678', NULL); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(89, N'Customer YBQTI', N'Smith Jr., Ronaldo', N'Owner', N'8901 - 14th Ave. S. Suite 3B', N'Seattle', N'WA', N'10049', N'USA', N'(206) 555-0123', N'(206) 555-0132'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(90, N'Customer XBBVR', N'Larsson, Katarina', N'Owner/Marketing Assistant', N'Keskuskatu 2345', N'Helsinki', NULL, N'10055', N'Finland', N'90-012 3456', N'90-789 0123'); +INSERT INTO Customer(custid, companyname, contactname, contacttitle, address, city, region, postalcode, country, phone, fax) + VALUES(91, N'Customer CCFIZ', N'Conn, Steve', N'Owner', N'ul. Filtrowa 6789', N'Warszawa', NULL, N'10068', N'Poland', N'(26) 234-5678', N'(26) 901-2345'); + + + +INSERT INTO Shipper(shipperid, companyname, phone) + VALUES(1, N'Shipper GVSUA', N'(503) 555-0137'); +INSERT INTO Shipper(shipperid, companyname, phone) + VALUES(2, N'Shipper ETYNR', N'(425) 555-0136'); +INSERT INTO Shipper(shipperid, companyname, phone) + VALUES(3, N'Shipper ZHISN', N'(415) 555-0138'); + + +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10248, 85, 5, '20060704 00:00:00.000', '20060801 00:00:00.000', '20060716 00:00:00.000', 3, 32.38, N'Ship to 85-B', N'6789 rue de l''Abbaye', N'Reims', NULL, N'10345', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10249, 79, 6, '20060705 00:00:00.000', '20060816 00:00:00.000', '20060710 00:00:00.000', 1, 11.61, N'Ship to 79-C', N'Luisenstr. 9012', N'Münster', NULL, N'10328', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10250, 34, 4, '20060708 00:00:00.000', '20060805 00:00:00.000', '20060712 00:00:00.000', 2, 65.83, N'Destination SCQXA', N'Rua do Paço, 7890', N'Rio de Janeiro', N'RJ', N'10195', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10251, 84, 3, '20060708 00:00:00.000', '20060805 00:00:00.000', '20060715 00:00:00.000', 1, 41.34, N'Ship to 84-A', N'3456, rue du Commerce', N'Lyon', NULL, N'10342', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10252, 76, 4, '20060709 00:00:00.000', '20060806 00:00:00.000', '20060711 00:00:00.000', 2, 51.30, N'Ship to 76-B', N'Boulevard Tirou, 9012', N'Charleroi', NULL, N'10318', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10253, 34, 3, '20060710 00:00:00.000', '20060724 00:00:00.000', '20060716 00:00:00.000', 2, 58.17, N'Destination JPAIY', N'Rua do Paço, 8901', N'Rio de Janeiro', N'RJ', N'10196', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10254, 14, 5, '20060711 00:00:00.000', '20060808 00:00:00.000', '20060723 00:00:00.000', 2, 22.98, N'Destination YUJRD', N'Hauptstr. 1234', N'Bern', NULL, N'10139', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10255, 68, 9, '20060712 00:00:00.000', '20060809 00:00:00.000', '20060715 00:00:00.000', 3, 148.33, N'Ship to 68-A', N'Starenweg 6789', N'Genève', NULL, N'10294', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10256, 88, 3, '20060715 00:00:00.000', '20060812 00:00:00.000', '20060717 00:00:00.000', 2, 13.97, N'Ship to 88-B', N'Rua do Mercado, 5678', N'Resende', N'SP', N'10354', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10257, 35, 4, '20060716 00:00:00.000', '20060813 00:00:00.000', '20060722 00:00:00.000', 3, 81.91, N'Destination JYDLM', N'Carrera1234 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10199', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10258, 20, 1, '20060717 00:00:00.000', '20060814 00:00:00.000', '20060723 00:00:00.000', 1, 140.51, N'Destination RVDMF', N'Kirchgasse 9012', N'Graz', NULL, N'10157', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10259, 13, 4, '20060718 00:00:00.000', '20060815 00:00:00.000', '20060725 00:00:00.000', 3, 3.25, N'Destination LGGCH', N'Sierras de Granada 9012', N'México D.F.', NULL, N'10137', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10260, 56, 4, '20060719 00:00:00.000', '20060816 00:00:00.000', '20060729 00:00:00.000', 1, 55.09, N'Ship to 56-A', N'Mehrheimerstr. 0123', N'Köln', NULL, N'10258', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10261, 61, 4, '20060719 00:00:00.000', '20060816 00:00:00.000', '20060730 00:00:00.000', 2, 3.05, N'Ship to 61-B', N'Rua da Panificadora, 6789', N'Rio de Janeiro', N'RJ', N'10274', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10262, 65, 8, '20060722 00:00:00.000', '20060819 00:00:00.000', '20060725 00:00:00.000', 3, 48.29, N'Ship to 65-B', N'8901 Milton Dr.', N'Albuquerque', N'NM', N'10286', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10263, 20, 9, '20060723 00:00:00.000', '20060820 00:00:00.000', '20060731 00:00:00.000', 3, 146.06, N'Destination FFXKT', N'Kirchgasse 0123', N'Graz', NULL, N'10158', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10264, 24, 6, '20060724 00:00:00.000', '20060821 00:00:00.000', '20060823 00:00:00.000', 3, 3.67, N'Destination KBSBN', N'Åkergatan 9012', N'Bräcke', NULL, N'10167', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10265, 7, 2, '20060725 00:00:00.000', '20060822 00:00:00.000', '20060812 00:00:00.000', 1, 55.28, N'Ship to 7-A', N'0123, place Kléber', N'Strasbourg', NULL, N'10329', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10266, 87, 3, '20060726 00:00:00.000', '20060906 00:00:00.000', '20060731 00:00:00.000', 3, 25.73, N'Ship to 87-B', N'Torikatu 2345', N'Oulu', NULL, N'10351', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10267, 25, 4, '20060729 00:00:00.000', '20060826 00:00:00.000', '20060806 00:00:00.000', 1, 208.58, N'Destination VAPXU', N'Berliner Platz 0123', N'München', NULL, N'10168', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10268, 33, 8, '20060730 00:00:00.000', '20060827 00:00:00.000', '20060802 00:00:00.000', 3, 66.29, N'Destination QJVQH', N'5ª Ave. Los Palos Grandes 5678', N'Caracas', N'DF', N'10193', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10269, 89, 5, '20060731 00:00:00.000', '20060814 00:00:00.000', '20060809 00:00:00.000', 1, 4.56, N'Ship to 89-B', N'8901 - 12th Ave. S.', N'Seattle', N'WA', N'10357', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10270, 87, 1, '20060801 00:00:00.000', '20060829 00:00:00.000', '20060802 00:00:00.000', 1, 136.54, N'Ship to 87-B', N'Torikatu 2345', N'Oulu', NULL, N'10351', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10271, 75, 6, '20060801 00:00:00.000', '20060829 00:00:00.000', '20060830 00:00:00.000', 2, 4.54, N'Ship to 75-C', N'P.O. Box 7890', N'Lander', N'WY', N'10316', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10272, 65, 6, '20060802 00:00:00.000', '20060830 00:00:00.000', '20060806 00:00:00.000', 2, 98.03, N'Ship to 65-A', N'7890 Milton Dr.', N'Albuquerque', N'NM', N'10285', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10273, 63, 3, '20060805 00:00:00.000', '20060902 00:00:00.000', '20060812 00:00:00.000', 3, 76.07, N'Ship to 63-A', N'Taucherstraße 1234', N'Cunewalde', NULL, N'10279', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10274, 85, 6, '20060806 00:00:00.000', '20060903 00:00:00.000', '20060816 00:00:00.000', 1, 6.01, N'Ship to 85-B', N'6789 rue de l''Abbaye', N'Reims', NULL, N'10345', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10275, 49, 1, '20060807 00:00:00.000', '20060904 00:00:00.000', '20060809 00:00:00.000', 1, 26.93, N'Ship to 49-A', N'Via Ludovico il Moro 8901', N'Bergamo', NULL, N'10235', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10276, 80, 8, '20060808 00:00:00.000', '20060822 00:00:00.000', '20060814 00:00:00.000', 3, 13.84, N'Ship to 80-C', N'Avda. Azteca 5678', N'México D.F.', NULL, N'10334', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10277, 52, 2, '20060809 00:00:00.000', '20060906 00:00:00.000', '20060813 00:00:00.000', 3, 125.77, N'Ship to 52-A', N'Heerstr. 9012', N'Leipzig', NULL, N'10247', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10278, 5, 8, '20060812 00:00:00.000', '20060909 00:00:00.000', '20060816 00:00:00.000', 2, 92.69, N'Ship to 5-C', N'Berguvsvägen 1234', N'Luleå', NULL, N'10269', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10279, 44, 8, '20060813 00:00:00.000', '20060910 00:00:00.000', '20060816 00:00:00.000', 2, 25.83, N'Ship to 44-A', N'Magazinweg 4567', N'Frankfurt a.M.', NULL, N'10222', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10280, 5, 2, '20060814 00:00:00.000', '20060911 00:00:00.000', '20060912 00:00:00.000', 1, 8.98, N'Ship to 5-B', N'Berguvsvägen 0123', N'Luleå', NULL, N'10268', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10281, 69, 4, '20060814 00:00:00.000', '20060828 00:00:00.000', '20060821 00:00:00.000', 1, 2.94, N'Ship to 69-A', N'Gran Vía, 9012', N'Madrid', NULL, N'10297', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10282, 69, 4, '20060815 00:00:00.000', '20060912 00:00:00.000', '20060821 00:00:00.000', 1, 12.69, N'Ship to 69-B', N'Gran Vía, 0123', N'Madrid', NULL, N'10298', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10283, 46, 3, '20060816 00:00:00.000', '20060913 00:00:00.000', '20060823 00:00:00.000', 3, 84.81, N'Ship to 46-A', N'Carrera 0123 con Ave. Bolívar #65-98 Llano Largo', N'Barquisimeto', N'Lara', N'10227', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10284, 44, 4, '20060819 00:00:00.000', '20060916 00:00:00.000', '20060827 00:00:00.000', 1, 76.56, N'Ship to 44-A', N'Magazinweg 4567', N'Frankfurt a.M.', NULL, N'10222', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10285, 63, 1, '20060820 00:00:00.000', '20060917 00:00:00.000', '20060826 00:00:00.000', 2, 76.83, N'Ship to 63-B', N'Taucherstraße 2345', N'Cunewalde', NULL, N'10280', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10286, 63, 8, '20060821 00:00:00.000', '20060918 00:00:00.000', '20060830 00:00:00.000', 3, 229.24, N'Ship to 63-B', N'Taucherstraße 2345', N'Cunewalde', NULL, N'10280', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10287, 67, 8, '20060822 00:00:00.000', '20060919 00:00:00.000', '20060828 00:00:00.000', 3, 12.76, N'Ship to 67-A', N'Av. Copacabana, 3456', N'Rio de Janeiro', N'RJ', N'10291', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10288, 66, 4, '20060823 00:00:00.000', '20060920 00:00:00.000', '20060903 00:00:00.000', 1, 7.45, N'Ship to 66-C', N'Strada Provinciale 2345', N'Reggio Emilia', NULL, N'10290', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10289, 11, 7, '20060826 00:00:00.000', '20060923 00:00:00.000', '20060828 00:00:00.000', 3, 22.77, N'Destination DLEUN', N'Fauntleroy Circus 4567', N'London', NULL, N'10132', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10290, 15, 8, '20060827 00:00:00.000', '20060924 00:00:00.000', '20060903 00:00:00.000', 1, 79.70, N'Destination HQZHO', N'Av. dos Lusíadas, 4567', N'Sao Paulo', N'SP', N'10142', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10291, 61, 6, '20060827 00:00:00.000', '20060924 00:00:00.000', '20060904 00:00:00.000', 2, 6.40, N'Ship to 61-A', N'Rua da Panificadora, 5678', N'Rio de Janeiro', N'RJ', N'10273', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10292, 81, 1, '20060828 00:00:00.000', '20060925 00:00:00.000', '20060902 00:00:00.000', 2, 1.35, N'Ship to 81-A', N'Av. Inês de Castro, 6789', N'Sao Paulo', N'SP', N'10335', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10293, 80, 1, '20060829 00:00:00.000', '20060926 00:00:00.000', '20060911 00:00:00.000', 3, 21.18, N'Ship to 80-B', N'Avda. Azteca 4567', N'México D.F.', NULL, N'10333', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10294, 65, 4, '20060830 00:00:00.000', '20060927 00:00:00.000', '20060905 00:00:00.000', 2, 147.26, N'Ship to 65-A', N'7890 Milton Dr.', N'Albuquerque', N'NM', N'10285', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10295, 85, 2, '20060902 00:00:00.000', '20060930 00:00:00.000', '20060910 00:00:00.000', 2, 1.15, N'Ship to 85-C', N'7890 rue de l''Abbaye', N'Reims', NULL, N'10346', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10296, 46, 6, '20060903 00:00:00.000', '20061001 00:00:00.000', '20060911 00:00:00.000', 1, 0.12, N'Ship to 46-C', N'Carrera 2345 con Ave. Bolívar #65-98 Llano Largo', N'Barquisimeto', N'Lara', N'10229', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10297, 7, 5, '20060904 00:00:00.000', '20061016 00:00:00.000', '20060910 00:00:00.000', 2, 5.74, N'Ship to 7-C', N'2345, place Kléber', N'Strasbourg', NULL, N'10331', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10298, 37, 6, '20060905 00:00:00.000', '20061003 00:00:00.000', '20060911 00:00:00.000', 2, 168.22, N'Destination ATSOA', N'4567 Johnstown Road', N'Cork', N'Co. Cork', N'10202', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10299, 67, 4, '20060906 00:00:00.000', '20061004 00:00:00.000', '20060913 00:00:00.000', 2, 29.76, N'Ship to 67-A', N'Av. Copacabana, 3456', N'Rio de Janeiro', N'RJ', N'10291', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10300, 49, 2, '20060909 00:00:00.000', '20061007 00:00:00.000', '20060918 00:00:00.000', 2, 17.68, N'Ship to 49-A', N'Via Ludovico il Moro 8901', N'Bergamo', NULL, N'10235', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10301, 86, 8, '20060909 00:00:00.000', '20061007 00:00:00.000', '20060917 00:00:00.000', 2, 45.08, N'Ship to 86-A', N'Adenauerallee 8901', N'Stuttgart', NULL, N'10347', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10302, 76, 4, '20060910 00:00:00.000', '20061008 00:00:00.000', '20061009 00:00:00.000', 2, 6.27, N'Ship to 76-B', N'Boulevard Tirou, 9012', N'Charleroi', NULL, N'10318', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10303, 30, 7, '20060911 00:00:00.000', '20061009 00:00:00.000', '20060918 00:00:00.000', 2, 107.83, N'Destination IIYDD', N'C/ Romero, 5678', N'Sevilla', NULL, N'10183', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10304, 80, 1, '20060912 00:00:00.000', '20061010 00:00:00.000', '20060917 00:00:00.000', 2, 63.79, N'Ship to 80-C', N'Avda. Azteca 5678', N'México D.F.', NULL, N'10334', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10305, 55, 8, '20060913 00:00:00.000', '20061011 00:00:00.000', '20061009 00:00:00.000', 3, 257.62, N'Ship to 55-B', N'8901 Bering St.', N'Anchorage', N'AK', N'10256', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10306, 69, 1, '20060916 00:00:00.000', '20061014 00:00:00.000', '20060923 00:00:00.000', 3, 7.56, N'Ship to 69-B', N'Gran Vía, 0123', N'Madrid', NULL, N'10298', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10307, 48, 2, '20060917 00:00:00.000', '20061015 00:00:00.000', '20060925 00:00:00.000', 2, 0.56, N'Ship to 48-B', N'6789 Chiaroscuro Rd.', N'Portland', N'OR', N'10233', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10308, 2, 7, '20060918 00:00:00.000', '20061016 00:00:00.000', '20060924 00:00:00.000', 3, 1.61, N'Destination QMVCI', N'Avda. de la Constitución 2345', N'México D.F.', NULL, N'10180', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10309, 37, 3, '20060919 00:00:00.000', '20061017 00:00:00.000', '20061023 00:00:00.000', 1, 47.30, N'Destination ATSOA', N'4567 Johnstown Road', N'Cork', N'Co. Cork', N'10202', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10310, 77, 8, '20060920 00:00:00.000', '20061018 00:00:00.000', '20060927 00:00:00.000', 2, 17.52, N'Ship to 77-B', N'2345 Jefferson Way Suite 2', N'Portland', N'OR', N'10321', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10311, 18, 1, '20060920 00:00:00.000', '20061004 00:00:00.000', '20060926 00:00:00.000', 3, 24.69, N'Destination SNPXM', N'0123, rue des Cinquante Otages', N'Nantes', NULL, N'10148', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10312, 86, 2, '20060923 00:00:00.000', '20061021 00:00:00.000', '20061003 00:00:00.000', 2, 40.26, N'Ship to 86-B', N'Adenauerallee 9012', N'Stuttgart', NULL, N'10348', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10313, 63, 2, '20060924 00:00:00.000', '20061022 00:00:00.000', '20061004 00:00:00.000', 2, 1.96, N'Ship to 63-A', N'Taucherstraße 1234', N'Cunewalde', NULL, N'10279', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10314, 65, 1, '20060925 00:00:00.000', '20061023 00:00:00.000', '20061004 00:00:00.000', 2, 74.16, N'Ship to 65-A', N'7890 Milton Dr.', N'Albuquerque', N'NM', N'10285', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10315, 38, 4, '20060926 00:00:00.000', '20061024 00:00:00.000', '20061003 00:00:00.000', 2, 41.76, N'Destination AXVHD', N'Garden House Crowther Way 9012', N'Cowes', N'Isle of Wight', N'10207', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10316, 65, 1, '20060927 00:00:00.000', '20061025 00:00:00.000', '20061008 00:00:00.000', 3, 150.15, N'Ship to 65-B', N'8901 Milton Dr.', N'Albuquerque', N'NM', N'10286', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10317, 48, 6, '20060930 00:00:00.000', '20061028 00:00:00.000', '20061010 00:00:00.000', 1, 12.69, N'Ship to 48-B', N'6789 Chiaroscuro Rd.', N'Portland', N'OR', N'10233', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10318, 38, 8, '20061001 00:00:00.000', '20061029 00:00:00.000', '20061004 00:00:00.000', 2, 4.73, N'Destination AXVHD', N'Garden House Crowther Way 9012', N'Cowes', N'Isle of Wight', N'10207', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10319, 80, 7, '20061002 00:00:00.000', '20061030 00:00:00.000', '20061011 00:00:00.000', 3, 64.50, N'Ship to 80-B', N'Avda. Azteca 4567', N'México D.F.', NULL, N'10333', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10320, 87, 5, '20061003 00:00:00.000', '20061017 00:00:00.000', '20061018 00:00:00.000', 3, 34.57, N'Ship to 87-A', N'Torikatu 1234', N'Oulu', NULL, N'10350', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10321, 38, 3, '20061003 00:00:00.000', '20061031 00:00:00.000', '20061011 00:00:00.000', 2, 3.43, N'Destination LMVGS', N'Garden House Crowther Way 8901', N'Cowes', N'Isle of Wight', N'10206', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10322, 58, 7, '20061004 00:00:00.000', '20061101 00:00:00.000', '20061023 00:00:00.000', 3, 0.40, N'Ship to 58-A', N'Calle Dr. Jorge Cash 3456', N'México D.F.', NULL, N'10261', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10323, 39, 4, '20061007 00:00:00.000', '20061104 00:00:00.000', '20061014 00:00:00.000', 1, 4.88, N'Destination RMBHM', N'Maubelstr. 1234', N'Brandenburg', NULL, N'10209', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10324, 71, 9, '20061008 00:00:00.000', '20061105 00:00:00.000', '20061010 00:00:00.000', 1, 214.27, N'Ship to 71-C', N'9012 Suffolk Ln.', N'Boise', N'ID', N'10307', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10325, 39, 1, '20061009 00:00:00.000', '20061023 00:00:00.000', '20061014 00:00:00.000', 3, 64.86, N'Destination RMBHM', N'Maubelstr. 1234', N'Brandenburg', NULL, N'10209', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10326, 8, 4, '20061010 00:00:00.000', '20061107 00:00:00.000', '20061014 00:00:00.000', 2, 77.92, N'Ship to 8-A', N'C/ Araquil, 0123', N'Madrid', NULL, N'10359', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10327, 24, 2, '20061011 00:00:00.000', '20061108 00:00:00.000', '20061014 00:00:00.000', 1, 63.36, N'Destination NCKKO', N'Åkergatan 7890', N'Bräcke', NULL, N'10165', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10328, 28, 4, '20061014 00:00:00.000', '20061111 00:00:00.000', '20061017 00:00:00.000', 3, 87.03, N'Destination CIRQO', N'Jardim das rosas n. 8901', N'Lisboa', NULL, N'10176', N'Portugal'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10329, 75, 4, '20061015 00:00:00.000', '20061126 00:00:00.000', '20061023 00:00:00.000', 2, 191.67, N'Ship to 75-C', N'P.O. Box 7890', N'Lander', N'WY', N'10316', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10330, 46, 3, '20061016 00:00:00.000', '20061113 00:00:00.000', '20061028 00:00:00.000', 1, 12.75, N'Ship to 46-A', N'Carrera 0123 con Ave. Bolívar #65-98 Llano Largo', N'Barquisimeto', N'Lara', N'10227', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10331, 9, 9, '20061016 00:00:00.000', '20061127 00:00:00.000', '20061021 00:00:00.000', 1, 10.19, N'Ship to 9-C', N'0123, rue des Bouchers', N'Marseille', NULL, N'10369', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10332, 51, 3, '20061017 00:00:00.000', '20061128 00:00:00.000', '20061021 00:00:00.000', 2, 52.84, N'Ship to 51-B', N'7890 rue St. Laurent', N'Montréal', N'Québec', N'10245', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10333, 87, 5, '20061018 00:00:00.000', '20061115 00:00:00.000', '20061025 00:00:00.000', 3, 0.59, N'Ship to 87-C', N'Torikatu 3456', N'Oulu', NULL, N'10352', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10334, 84, 8, '20061021 00:00:00.000', '20061118 00:00:00.000', '20061028 00:00:00.000', 2, 8.56, N'Ship to 84-B', N'4567, rue du Commerce', N'Lyon', NULL, N'10343', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10335, 37, 7, '20061022 00:00:00.000', '20061119 00:00:00.000', '20061024 00:00:00.000', 2, 42.11, N'Destination ATSOA', N'4567 Johnstown Road', N'Cork', N'Co. Cork', N'10202', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10336, 60, 7, '20061023 00:00:00.000', '20061120 00:00:00.000', '20061025 00:00:00.000', 2, 15.51, N'Ship to 60-B', N'Estrada da saúde n. 3456', N'Lisboa', NULL, N'10271', N'Portugal'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10337, 25, 4, '20061024 00:00:00.000', '20061121 00:00:00.000', '20061029 00:00:00.000', 3, 108.26, N'Destination QOCBL', N'Berliner Platz 1234', N'München', NULL, N'10169', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10338, 55, 4, '20061025 00:00:00.000', '20061122 00:00:00.000', '20061029 00:00:00.000', 3, 84.21, N'Ship to 55-C', N'9012 Bering St.', N'Anchorage', N'AK', N'10257', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10339, 51, 2, '20061028 00:00:00.000', '20061125 00:00:00.000', '20061104 00:00:00.000', 2, 15.66, N'Ship to 51-C', N'8901 rue St. Laurent', N'Montréal', N'Québec', N'10246', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10340, 9, 1, '20061029 00:00:00.000', '20061126 00:00:00.000', '20061108 00:00:00.000', 3, 166.31, N'Ship to 9-A', N'8901, rue des Bouchers', N'Marseille', NULL, N'10367', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10341, 73, 7, '20061029 00:00:00.000', '20061126 00:00:00.000', '20061105 00:00:00.000', 3, 26.78, N'Ship to 73-A', N'Vinbæltet 1234', N'Kobenhavn', NULL, N'10310', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10342, 25, 4, '20061030 00:00:00.000', '20061113 00:00:00.000', '20061104 00:00:00.000', 2, 54.83, N'Destination VAPXU', N'Berliner Platz 0123', N'München', NULL, N'10168', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10343, 44, 4, '20061031 00:00:00.000', '20061128 00:00:00.000', '20061106 00:00:00.000', 1, 110.37, N'Ship to 44-A', N'Magazinweg 4567', N'Frankfurt a.M.', NULL, N'10222', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10344, 89, 4, '20061101 00:00:00.000', '20061129 00:00:00.000', '20061105 00:00:00.000', 2, 23.29, N'Ship to 89-A', N'7890 - 12th Ave. S.', N'Seattle', N'WA', N'10356', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10345, 63, 2, '20061104 00:00:00.000', '20061202 00:00:00.000', '20061111 00:00:00.000', 2, 249.06, N'Ship to 63-B', N'Taucherstraße 2345', N'Cunewalde', NULL, N'10280', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10346, 65, 3, '20061105 00:00:00.000', '20061217 00:00:00.000', '20061108 00:00:00.000', 3, 142.08, N'Ship to 65-A', N'7890 Milton Dr.', N'Albuquerque', N'NM', N'10285', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10347, 21, 4, '20061106 00:00:00.000', '20061204 00:00:00.000', '20061108 00:00:00.000', 3, 3.10, N'Destination KKELL', N'Rua Orós, 4567', N'Sao Paulo', N'SP', N'10162', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10348, 86, 4, '20061107 00:00:00.000', '20061205 00:00:00.000', '20061115 00:00:00.000', 2, 0.78, N'Ship to 86-B', N'Adenauerallee 9012', N'Stuttgart', NULL, N'10348', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10349, 75, 7, '20061108 00:00:00.000', '20061206 00:00:00.000', '20061115 00:00:00.000', 1, 8.63, N'Ship to 75-C', N'P.O. Box 7890', N'Lander', N'WY', N'10316', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10350, 41, 6, '20061111 00:00:00.000', '20061209 00:00:00.000', '20061203 00:00:00.000', 2, 64.19, N'Destination DWJIO', N'9012 rue Alsace-Lorraine', N'Toulouse', NULL, N'10217', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10351, 20, 1, '20061111 00:00:00.000', '20061209 00:00:00.000', '20061120 00:00:00.000', 1, 162.33, N'Destination RVDMF', N'Kirchgasse 9012', N'Graz', NULL, N'10157', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10352, 28, 3, '20061112 00:00:00.000', '20061126 00:00:00.000', '20061118 00:00:00.000', 3, 1.30, N'Destination OTSWR', N'Jardim das rosas n. 9012', N'Lisboa', NULL, N'10177', N'Portugal'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10353, 59, 7, '20061113 00:00:00.000', '20061211 00:00:00.000', '20061125 00:00:00.000', 3, 360.63, N'Ship to 59-B', N'Geislweg 7890', N'Salzburg', NULL, N'10265', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10354, 58, 8, '20061114 00:00:00.000', '20061212 00:00:00.000', '20061120 00:00:00.000', 3, 53.80, N'Ship to 58-C', N'Calle Dr. Jorge Cash 5678', N'México D.F.', NULL, N'10263', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10355, 4, 6, '20061115 00:00:00.000', '20061213 00:00:00.000', '20061120 00:00:00.000', 1, 41.95, N'Ship to 4-A', N'Brook Farm Stratford St. Mary 0123', N'Colchester', N'Essex', N'10238', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10356, 86, 6, '20061118 00:00:00.000', '20061216 00:00:00.000', '20061127 00:00:00.000', 2, 36.71, N'Ship to 86-A', N'Adenauerallee 8901', N'Stuttgart', NULL, N'10347', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10357, 46, 1, '20061119 00:00:00.000', '20061217 00:00:00.000', '20061202 00:00:00.000', 3, 34.88, N'Ship to 46-B', N'Carrera 1234 con Ave. Bolívar #65-98 Llano Largo', N'Barquisimeto', N'Lara', N'10228', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10358, 41, 5, '20061120 00:00:00.000', '20061218 00:00:00.000', '20061127 00:00:00.000', 1, 19.64, N'Ship to 41-C', N'0123 rue Alsace-Lorraine', N'Toulouse', NULL, N'10218', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10359, 72, 5, '20061121 00:00:00.000', '20061219 00:00:00.000', '20061126 00:00:00.000', 3, 288.43, N'Ship to 72-C', N'1234 Wadhurst Rd.', N'London', NULL, N'10309', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10360, 7, 4, '20061122 00:00:00.000', '20061220 00:00:00.000', '20061202 00:00:00.000', 3, 131.70, N'Ship to 7-C', N'2345, place Kléber', N'Strasbourg', NULL, N'10331', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10361, 63, 1, '20061122 00:00:00.000', '20061220 00:00:00.000', '20061203 00:00:00.000', 2, 183.17, N'Ship to 63-C', N'Taucherstraße 3456', N'Cunewalde', NULL, N'10281', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10362, 9, 3, '20061125 00:00:00.000', '20061223 00:00:00.000', '20061128 00:00:00.000', 1, 96.04, N'Ship to 9-B', N'9012, rue des Bouchers', N'Marseille', NULL, N'10368', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10363, 17, 4, '20061126 00:00:00.000', '20061224 00:00:00.000', '20061204 00:00:00.000', 3, 30.54, N'Destination BJCXA', N'Walserweg 7890', N'Aachen', NULL, N'10145', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10364, 19, 1, '20061126 00:00:00.000', '20070107 00:00:00.000', '20061204 00:00:00.000', 1, 71.97, N'Destination QTKCU', N'3456 King George', N'London', NULL, N'10151', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10365, 3, 3, '20061127 00:00:00.000', '20061225 00:00:00.000', '20061202 00:00:00.000', 2, 22.00, N'Destination FQFLS', N'Mataderos 3456', N'México D.F.', NULL, N'10211', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10366, 29, 8, '20061128 00:00:00.000', '20070109 00:00:00.000', '20061230 00:00:00.000', 2, 10.14, N'Destination VPNNG', N'Rambla de Cataluña, 0123', N'Barcelona', NULL, N'10178', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10367, 83, 7, '20061128 00:00:00.000', '20061226 00:00:00.000', '20061202 00:00:00.000', 3, 13.55, N'Ship to 83-B', N'Smagsloget 1234', N'Århus', NULL, N'10340', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10368, 20, 2, '20061129 00:00:00.000', '20061227 00:00:00.000', '20061202 00:00:00.000', 2, 101.95, N'Destination RVDMF', N'Kirchgasse 9012', N'Graz', NULL, N'10157', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10369, 75, 8, '20061202 00:00:00.000', '20061230 00:00:00.000', '20061209 00:00:00.000', 2, 195.68, N'Ship to 75-C', N'P.O. Box 7890', N'Lander', N'WY', N'10316', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10370, 14, 6, '20061203 00:00:00.000', '20061231 00:00:00.000', '20061227 00:00:00.000', 2, 1.17, N'Destination YUJRD', N'Hauptstr. 1234', N'Bern', NULL, N'10139', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10371, 41, 1, '20061203 00:00:00.000', '20061231 00:00:00.000', '20061224 00:00:00.000', 1, 0.45, N'Ship to 41-C', N'0123 rue Alsace-Lorraine', N'Toulouse', NULL, N'10218', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10372, 62, 5, '20061204 00:00:00.000', '20070101 00:00:00.000', '20061209 00:00:00.000', 2, 890.78, N'Ship to 62-A', N'Alameda dos Canàrios, 8901', N'Sao Paulo', N'SP', N'10276', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10373, 37, 4, '20061205 00:00:00.000', '20070102 00:00:00.000', '20061211 00:00:00.000', 3, 124.12, N'Destination KPVYJ', N'5678 Johnstown Road', N'Cork', N'Co. Cork', N'10203', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10374, 91, 1, '20061205 00:00:00.000', '20070102 00:00:00.000', '20061209 00:00:00.000', 3, 3.94, N'Ship to 91-A', N'ul. Filtrowa 5678', N'Warszawa', NULL, N'10364', N'Poland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10375, 36, 3, '20061206 00:00:00.000', '20070103 00:00:00.000', '20061209 00:00:00.000', 2, 20.12, N'Destination HOHCR', N'City Center Plaza 3456 Main St.', N'Elgin', N'OR', N'10201', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10376, 51, 1, '20061209 00:00:00.000', '20070106 00:00:00.000', '20061213 00:00:00.000', 2, 20.39, N'Ship to 51-B', N'7890 rue St. Laurent', N'Montréal', N'Québec', N'10245', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10377, 72, 1, '20061209 00:00:00.000', '20070106 00:00:00.000', '20061213 00:00:00.000', 3, 22.21, N'Ship to 72-C', N'1234 Wadhurst Rd.', N'London', NULL, N'10309', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10378, 24, 5, '20061210 00:00:00.000', '20070107 00:00:00.000', '20061219 00:00:00.000', 3, 5.44, N'Destination KBSBN', N'Åkergatan 9012', N'Bräcke', NULL, N'10167', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10379, 61, 2, '20061211 00:00:00.000', '20070108 00:00:00.000', '20061213 00:00:00.000', 1, 45.03, N'Ship to 61-B', N'Rua da Panificadora, 6789', N'Rio de Janeiro', N'RJ', N'10274', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10380, 37, 8, '20061212 00:00:00.000', '20070109 00:00:00.000', '20070116 00:00:00.000', 3, 35.03, N'Destination KPVYJ', N'5678 Johnstown Road', N'Cork', N'Co. Cork', N'10203', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10381, 46, 3, '20061212 00:00:00.000', '20070109 00:00:00.000', '20061213 00:00:00.000', 3, 7.99, N'Ship to 46-C', N'Carrera 2345 con Ave. Bolívar #65-98 Llano Largo', N'Barquisimeto', N'Lara', N'10229', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10382, 20, 4, '20061213 00:00:00.000', '20070110 00:00:00.000', '20061216 00:00:00.000', 1, 94.77, N'Destination FFXKT', N'Kirchgasse 0123', N'Graz', NULL, N'10158', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10383, 4, 8, '20061216 00:00:00.000', '20070113 00:00:00.000', '20061218 00:00:00.000', 3, 34.24, N'Ship to 4-B', N'Brook Farm Stratford St. Mary 1234', N'Colchester', N'Essex', N'10239', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10384, 5, 3, '20061216 00:00:00.000', '20070113 00:00:00.000', '20061220 00:00:00.000', 3, 168.64, N'Ship to 5-C', N'Berguvsvägen 1234', N'Luleå', NULL, N'10269', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10385, 75, 1, '20061217 00:00:00.000', '20070114 00:00:00.000', '20061223 00:00:00.000', 2, 30.96, N'Ship to 75-B', N'P.O. Box 6789', N'Lander', N'WY', N'10315', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10386, 21, 9, '20061218 00:00:00.000', '20070101 00:00:00.000', '20061225 00:00:00.000', 3, 13.99, N'Destination RNSMS', N'Rua Orós, 2345', N'Sao Paulo', N'SP', N'10160', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10387, 70, 1, '20061218 00:00:00.000', '20070115 00:00:00.000', '20061220 00:00:00.000', 2, 93.63, N'Ship to 70-B', N'Erling Skakkes gate 5678', N'Stavern', NULL, N'10303', N'Norway'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10388, 72, 2, '20061219 00:00:00.000', '20070116 00:00:00.000', '20061220 00:00:00.000', 1, 34.86, N'Ship to 72-C', N'1234 Wadhurst Rd.', N'London', NULL, N'10309', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10389, 10, 4, '20061220 00:00:00.000', '20070117 00:00:00.000', '20061224 00:00:00.000', 2, 47.42, N'Destination OLSSJ', N'2345 Tsawassen Blvd.', N'Tsawassen', N'BC', N'10130', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10390, 20, 6, '20061223 00:00:00.000', '20070120 00:00:00.000', '20061226 00:00:00.000', 1, 126.38, N'Destination RVDMF', N'Kirchgasse 9012', N'Graz', NULL, N'10157', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10391, 17, 3, '20061223 00:00:00.000', '20070120 00:00:00.000', '20061231 00:00:00.000', 3, 5.45, N'Destination AJTHX', N'Walserweg 9012', N'Aachen', NULL, N'10147', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10392, 59, 2, '20061224 00:00:00.000', '20070121 00:00:00.000', '20070101 00:00:00.000', 3, 122.46, N'Ship to 59-A', N'Geislweg 6789', N'Salzburg', NULL, N'10264', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10393, 71, 1, '20061225 00:00:00.000', '20070122 00:00:00.000', '20070103 00:00:00.000', 3, 126.56, N'Ship to 71-B', N'8901 Suffolk Ln.', N'Boise', N'ID', N'10306', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10394, 36, 1, '20061225 00:00:00.000', '20070122 00:00:00.000', '20070103 00:00:00.000', 3, 30.34, N'Destination AWPJG', N'City Center Plaza 2345 Main St.', N'Elgin', N'OR', N'10200', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10395, 35, 6, '20061226 00:00:00.000', '20070123 00:00:00.000', '20070103 00:00:00.000', 1, 184.41, N'Destination JYDLM', N'Carrera1234 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10199', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10396, 25, 1, '20061227 00:00:00.000', '20070110 00:00:00.000', '20070106 00:00:00.000', 3, 135.35, N'Destination VAPXU', N'Berliner Platz 0123', N'München', NULL, N'10168', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10397, 60, 5, '20061227 00:00:00.000', '20070124 00:00:00.000', '20070102 00:00:00.000', 1, 60.26, N'Ship to 60-A', N'Estrada da saúde n. 2345', N'Lisboa', NULL, N'10270', N'Portugal'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10398, 71, 2, '20061230 00:00:00.000', '20070127 00:00:00.000', '20070109 00:00:00.000', 3, 89.16, N'Ship to 71-C', N'9012 Suffolk Ln.', N'Boise', N'ID', N'10307', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10399, 83, 8, '20061231 00:00:00.000', '20070114 00:00:00.000', '20070108 00:00:00.000', 3, 27.36, N'Ship to 83-C', N'Smagsloget 2345', N'Århus', NULL, N'10341', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10400, 19, 1, '20070101 00:00:00.000', '20070129 00:00:00.000', '20070116 00:00:00.000', 3, 83.93, N'Destination BBMRT', N'4567 King George', N'London', NULL, N'10152', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10401, 65, 1, '20070101 00:00:00.000', '20070129 00:00:00.000', '20070110 00:00:00.000', 1, 12.51, N'Ship to 65-A', N'7890 Milton Dr.', N'Albuquerque', N'NM', N'10285', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10402, 20, 8, '20070102 00:00:00.000', '20070213 00:00:00.000', '20070110 00:00:00.000', 2, 67.88, N'Destination FFXKT', N'Kirchgasse 0123', N'Graz', NULL, N'10158', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10403, 20, 4, '20070103 00:00:00.000', '20070131 00:00:00.000', '20070109 00:00:00.000', 3, 73.79, N'Destination RVDMF', N'Kirchgasse 9012', N'Graz', NULL, N'10157', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10404, 49, 2, '20070103 00:00:00.000', '20070131 00:00:00.000', '20070108 00:00:00.000', 1, 155.97, N'Ship to 49-B', N'Via Ludovico il Moro 9012', N'Bergamo', NULL, N'10236', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10405, 47, 1, '20070106 00:00:00.000', '20070203 00:00:00.000', '20070122 00:00:00.000', 1, 34.82, N'Ship to 47-B', N'Ave. 5 de Mayo Porlamar 4567', N'I. de Margarita', N'Nueva Esparta', N'10231', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10406, 62, 7, '20070107 00:00:00.000', '20070218 00:00:00.000', '20070113 00:00:00.000', 1, 108.04, N'Ship to 62-A', N'Alameda dos Canàrios, 8901', N'Sao Paulo', N'SP', N'10276', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10407, 56, 2, '20070107 00:00:00.000', '20070204 00:00:00.000', '20070130 00:00:00.000', 2, 91.48, N'Ship to 56-B', N'Mehrheimerstr. 1234', N'Köln', NULL, N'10259', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10408, 23, 8, '20070108 00:00:00.000', '20070205 00:00:00.000', '20070114 00:00:00.000', 1, 11.26, N'Destination PXQRR', N'5678, chaussée de Tournai', N'Lille', NULL, N'10163', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10409, 54, 3, '20070109 00:00:00.000', '20070206 00:00:00.000', '20070114 00:00:00.000', 1, 29.83, N'Ship to 54-C', N'Ing. Gustavo Moncada 6789 Piso 20-A', N'Buenos Aires', NULL, N'10254', N'Argentina'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10410, 10, 3, '20070110 00:00:00.000', '20070207 00:00:00.000', '20070115 00:00:00.000', 3, 2.40, N'Destination OLSSJ', N'2345 Tsawassen Blvd.', N'Tsawassen', N'BC', N'10130', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10411, 10, 9, '20070110 00:00:00.000', '20070207 00:00:00.000', '20070121 00:00:00.000', 3, 23.65, N'Destination XJIBQ', N'1234 Tsawassen Blvd.', N'Tsawassen', N'BC', N'10129', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10412, 87, 8, '20070113 00:00:00.000', '20070210 00:00:00.000', '20070115 00:00:00.000', 2, 3.77, N'Ship to 87-C', N'Torikatu 3456', N'Oulu', NULL, N'10352', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10413, 41, 3, '20070114 00:00:00.000', '20070211 00:00:00.000', '20070116 00:00:00.000', 2, 95.66, N'Destination DWJIO', N'9012 rue Alsace-Lorraine', N'Toulouse', NULL, N'10217', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10414, 21, 2, '20070114 00:00:00.000', '20070211 00:00:00.000', '20070117 00:00:00.000', 3, 21.48, N'Destination SSYXZ', N'Rua Orós, 3456', N'Sao Paulo', N'SP', N'10161', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10415, 36, 3, '20070115 00:00:00.000', '20070212 00:00:00.000', '20070124 00:00:00.000', 1, 0.20, N'Destination AWPJG', N'City Center Plaza 2345 Main St.', N'Elgin', N'OR', N'10200', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10416, 87, 8, '20070116 00:00:00.000', '20070213 00:00:00.000', '20070127 00:00:00.000', 3, 22.72, N'Ship to 87-A', N'Torikatu 1234', N'Oulu', NULL, N'10350', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10417, 73, 4, '20070116 00:00:00.000', '20070213 00:00:00.000', '20070128 00:00:00.000', 3, 70.29, N'Ship to 73-C', N'Vinbæltet 2345', N'Kobenhavn', NULL, N'10311', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10418, 63, 4, '20070117 00:00:00.000', '20070214 00:00:00.000', '20070124 00:00:00.000', 1, 17.55, N'Ship to 63-B', N'Taucherstraße 2345', N'Cunewalde', NULL, N'10280', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10419, 68, 4, '20070120 00:00:00.000', '20070217 00:00:00.000', '20070130 00:00:00.000', 2, 137.35, N'Ship to 68-A', N'Starenweg 6789', N'Genève', NULL, N'10294', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10420, 88, 3, '20070121 00:00:00.000', '20070218 00:00:00.000', '20070127 00:00:00.000', 1, 44.12, N'Ship to 88-C', N'Rua do Mercado, 6789', N'Resende', N'SP', N'10355', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10421, 61, 8, '20070121 00:00:00.000', '20070304 00:00:00.000', '20070127 00:00:00.000', 1, 99.23, N'Ship to 61-C', N'Rua da Panificadora, 7890', N'Rio de Janeiro', N'RJ', N'10275', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10422, 27, 2, '20070122 00:00:00.000', '20070219 00:00:00.000', '20070131 00:00:00.000', 1, 3.02, N'Destination FFLQT', N'Via Monte Bianco 6789', N'Torino', NULL, N'10174', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10423, 31, 6, '20070123 00:00:00.000', '20070206 00:00:00.000', '20070224 00:00:00.000', 3, 24.50, N'Destination VNIAG', N'Av. Brasil, 9012', N'Campinas', N'SP', N'10187', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10424, 51, 7, '20070123 00:00:00.000', '20070220 00:00:00.000', '20070127 00:00:00.000', 2, 370.61, N'Ship to 51-C', N'8901 rue St. Laurent', N'Montréal', N'Québec', N'10246', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10425, 41, 6, '20070124 00:00:00.000', '20070221 00:00:00.000', '20070214 00:00:00.000', 2, 7.93, N'Destination DWJIO', N'9012 rue Alsace-Lorraine', N'Toulouse', NULL, N'10217', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10426, 29, 4, '20070127 00:00:00.000', '20070224 00:00:00.000', '20070206 00:00:00.000', 1, 18.69, N'Destination WOFLH', N'Rambla de Cataluña, 1234', N'Barcelona', NULL, N'10179', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10427, 59, 4, '20070127 00:00:00.000', '20070224 00:00:00.000', '20070303 00:00:00.000', 2, 31.29, N'Ship to 59-C', N'Geislweg 8901', N'Salzburg', NULL, N'10266', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10428, 66, 7, '20070128 00:00:00.000', '20070225 00:00:00.000', '20070204 00:00:00.000', 1, 11.09, N'Ship to 66-C', N'Strada Provinciale 2345', N'Reggio Emilia', NULL, N'10290', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10429, 37, 3, '20070129 00:00:00.000', '20070312 00:00:00.000', '20070207 00:00:00.000', 2, 56.63, N'Destination DGKOU', N'6789 Johnstown Road', N'Cork', N'Co. Cork', N'10204', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10430, 20, 4, '20070130 00:00:00.000', '20070213 00:00:00.000', '20070203 00:00:00.000', 1, 458.78, N'Destination CUVPF', N'Kirchgasse 1234', N'Graz', NULL, N'10159', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10431, 10, 4, '20070130 00:00:00.000', '20070213 00:00:00.000', '20070207 00:00:00.000', 2, 44.17, N'Destination OLSSJ', N'2345 Tsawassen Blvd.', N'Tsawassen', N'BC', N'10130', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10432, 75, 3, '20070131 00:00:00.000', '20070214 00:00:00.000', '20070207 00:00:00.000', 2, 4.34, N'Ship to 75-A', N'P.O. Box 5678', N'Lander', N'WY', N'10314', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10433, 60, 3, '20070203 00:00:00.000', '20070303 00:00:00.000', '20070304 00:00:00.000', 3, 73.83, N'Ship to 60-A', N'Estrada da saúde n. 2345', N'Lisboa', NULL, N'10270', N'Portugal'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10434, 24, 3, '20070203 00:00:00.000', '20070303 00:00:00.000', '20070213 00:00:00.000', 2, 17.92, N'Destination NCKKO', N'Åkergatan 7890', N'Bräcke', NULL, N'10165', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10435, 16, 8, '20070204 00:00:00.000', '20070318 00:00:00.000', '20070207 00:00:00.000', 2, 9.21, N'Destination QKQNB', N'Berkeley Gardens 5678 Brewery', N'London', NULL, N'10143', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10436, 7, 3, '20070205 00:00:00.000', '20070305 00:00:00.000', '20070211 00:00:00.000', 2, 156.66, N'Ship to 7-C', N'2345, place Kléber', N'Strasbourg', NULL, N'10331', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10437, 87, 8, '20070205 00:00:00.000', '20070305 00:00:00.000', '20070212 00:00:00.000', 1, 19.97, N'Ship to 87-A', N'Torikatu 1234', N'Oulu', NULL, N'10350', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10438, 79, 3, '20070206 00:00:00.000', '20070306 00:00:00.000', '20070214 00:00:00.000', 2, 8.24, N'Ship to 79-A', N'Luisenstr. 7890', N'Münster', NULL, N'10326', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10439, 51, 6, '20070207 00:00:00.000', '20070307 00:00:00.000', '20070210 00:00:00.000', 3, 4.07, N'Ship to 51-C', N'8901 rue St. Laurent', N'Montréal', N'Québec', N'10246', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10440, 71, 4, '20070210 00:00:00.000', '20070310 00:00:00.000', '20070228 00:00:00.000', 2, 86.53, N'Ship to 71-B', N'8901 Suffolk Ln.', N'Boise', N'ID', N'10306', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10441, 55, 3, '20070210 00:00:00.000', '20070324 00:00:00.000', '20070314 00:00:00.000', 2, 73.02, N'Ship to 55-C', N'9012 Bering St.', N'Anchorage', N'AK', N'10257', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10442, 20, 3, '20070211 00:00:00.000', '20070311 00:00:00.000', '20070218 00:00:00.000', 2, 47.94, N'Destination RVDMF', N'Kirchgasse 9012', N'Graz', NULL, N'10157', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10443, 66, 8, '20070212 00:00:00.000', '20070312 00:00:00.000', '20070214 00:00:00.000', 1, 13.95, N'Ship to 66-C', N'Strada Provinciale 2345', N'Reggio Emilia', NULL, N'10290', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10444, 5, 3, '20070212 00:00:00.000', '20070312 00:00:00.000', '20070221 00:00:00.000', 3, 3.50, N'Ship to 5-B', N'Berguvsvägen 0123', N'Luleå', NULL, N'10268', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10445, 5, 3, '20070213 00:00:00.000', '20070313 00:00:00.000', '20070220 00:00:00.000', 1, 9.30, N'Ship to 5-A', N'Berguvsvägen 9012', N'Luleå', NULL, N'10267', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10446, 79, 6, '20070214 00:00:00.000', '20070314 00:00:00.000', '20070219 00:00:00.000', 1, 14.68, N'Ship to 79-C', N'Luisenstr. 9012', N'Münster', NULL, N'10328', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10447, 67, 4, '20070214 00:00:00.000', '20070314 00:00:00.000', '20070307 00:00:00.000', 2, 68.66, N'Ship to 67-C', N'Av. Copacabana, 5678', N'Rio de Janeiro', N'RJ', N'10293', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10448, 64, 4, '20070217 00:00:00.000', '20070317 00:00:00.000', '20070224 00:00:00.000', 2, 38.82, N'Ship to 64-A', N'Av. del Libertador 4567', N'Buenos Aires', NULL, N'10282', N'Argentina'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10449, 7, 3, '20070218 00:00:00.000', '20070318 00:00:00.000', '20070227 00:00:00.000', 2, 53.30, N'Ship to 7-C', N'2345, place Kléber', N'Strasbourg', NULL, N'10331', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10450, 84, 8, '20070219 00:00:00.000', '20070319 00:00:00.000', '20070311 00:00:00.000', 2, 7.23, N'Ship to 84-C', N'5678, rue du Commerce', N'Lyon', NULL, N'10344', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10451, 63, 4, '20070219 00:00:00.000', '20070305 00:00:00.000', '20070312 00:00:00.000', 3, 189.09, N'Ship to 63-C', N'Taucherstraße 3456', N'Cunewalde', NULL, N'10281', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10452, 71, 8, '20070220 00:00:00.000', '20070320 00:00:00.000', '20070226 00:00:00.000', 1, 140.26, N'Ship to 71-B', N'8901 Suffolk Ln.', N'Boise', N'ID', N'10306', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10453, 4, 1, '20070221 00:00:00.000', '20070321 00:00:00.000', '20070226 00:00:00.000', 2, 25.36, N'Ship to 4-C', N'Brook Farm Stratford St. Mary 2345', N'Colchester', N'Essex', N'10240', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10454, 41, 4, '20070221 00:00:00.000', '20070321 00:00:00.000', '20070225 00:00:00.000', 3, 2.74, N'Ship to 41-C', N'0123 rue Alsace-Lorraine', N'Toulouse', NULL, N'10218', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10455, 87, 8, '20070224 00:00:00.000', '20070407 00:00:00.000', '20070303 00:00:00.000', 2, 180.45, N'Ship to 87-B', N'Torikatu 2345', N'Oulu', NULL, N'10351', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10456, 39, 8, '20070225 00:00:00.000', '20070408 00:00:00.000', '20070228 00:00:00.000', 2, 8.12, N'Destination DKMQA', N'Maubelstr. 0123', N'Brandenburg', NULL, N'10208', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10457, 39, 2, '20070225 00:00:00.000', '20070325 00:00:00.000', '20070303 00:00:00.000', 1, 11.57, N'Destination RMBHM', N'Maubelstr. 1234', N'Brandenburg', NULL, N'10209', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10458, 76, 7, '20070226 00:00:00.000', '20070326 00:00:00.000', '20070304 00:00:00.000', 3, 147.06, N'Ship to 76-A', N'Boulevard Tirou, 8901', N'Charleroi', NULL, N'10317', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10459, 84, 4, '20070227 00:00:00.000', '20070327 00:00:00.000', '20070228 00:00:00.000', 2, 25.09, N'Ship to 84-B', N'4567, rue du Commerce', N'Lyon', NULL, N'10343', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10460, 24, 8, '20070228 00:00:00.000', '20070328 00:00:00.000', '20070303 00:00:00.000', 1, 16.27, N'Destination YCMPK', N'Åkergatan 8901', N'Bräcke', NULL, N'10166', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10461, 46, 1, '20070228 00:00:00.000', '20070328 00:00:00.000', '20070305 00:00:00.000', 3, 148.61, N'Ship to 46-A', N'Carrera 0123 con Ave. Bolívar #65-98 Llano Largo', N'Barquisimeto', N'Lara', N'10227', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10462, 16, 2, '20070303 00:00:00.000', '20070331 00:00:00.000', '20070318 00:00:00.000', 1, 6.17, N'Destination ARRMM', N'Berkeley Gardens 6789 Brewery', N'London', NULL, N'10144', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10463, 76, 5, '20070304 00:00:00.000', '20070401 00:00:00.000', '20070306 00:00:00.000', 3, 14.78, N'Ship to 76-B', N'Boulevard Tirou, 9012', N'Charleroi', NULL, N'10318', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10464, 28, 4, '20070304 00:00:00.000', '20070401 00:00:00.000', '20070314 00:00:00.000', 2, 89.00, N'Destination OTSWR', N'Jardim das rosas n. 9012', N'Lisboa', NULL, N'10177', N'Portugal'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10465, 83, 1, '20070305 00:00:00.000', '20070402 00:00:00.000', '20070314 00:00:00.000', 3, 145.04, N'Ship to 83-A', N'Smagsloget 0123', N'Århus', NULL, N'10339', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10466, 15, 4, '20070306 00:00:00.000', '20070403 00:00:00.000', '20070313 00:00:00.000', 1, 11.93, N'Destination GGSQD', N'Av. dos Lusíadas, 2345', N'Sao Paulo', N'SP', N'10140', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10467, 49, 8, '20070306 00:00:00.000', '20070403 00:00:00.000', '20070311 00:00:00.000', 2, 4.93, N'Ship to 49-C', N'Via Ludovico il Moro 0123', N'Bergamo', NULL, N'10237', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10468, 39, 3, '20070307 00:00:00.000', '20070404 00:00:00.000', '20070312 00:00:00.000', 3, 44.12, N'Destination RMBHM', N'Maubelstr. 1234', N'Brandenburg', NULL, N'10209', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10469, 89, 1, '20070310 00:00:00.000', '20070407 00:00:00.000', '20070314 00:00:00.000', 1, 60.18, N'Ship to 89-C', N'9012 - 12th Ave. S.', N'Seattle', N'WA', N'10358', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10470, 9, 4, '20070311 00:00:00.000', '20070408 00:00:00.000', '20070314 00:00:00.000', 2, 64.56, N'Ship to 9-C', N'0123, rue des Bouchers', N'Marseille', NULL, N'10369', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10471, 11, 2, '20070311 00:00:00.000', '20070408 00:00:00.000', '20070318 00:00:00.000', 3, 45.59, N'Destination NZASL', N'Fauntleroy Circus 5678', N'London', NULL, N'10133', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10472, 72, 8, '20070312 00:00:00.000', '20070409 00:00:00.000', '20070319 00:00:00.000', 1, 4.20, N'Ship to 72-A', N'0123 Wadhurst Rd.', N'London', NULL, N'10308', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10473, 38, 1, '20070313 00:00:00.000', '20070327 00:00:00.000', '20070321 00:00:00.000', 3, 16.37, N'Destination AXVHD', N'Garden House Crowther Way 9012', N'Cowes', N'Isle of Wight', N'10207', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10474, 58, 5, '20070313 00:00:00.000', '20070410 00:00:00.000', '20070321 00:00:00.000', 2, 83.49, N'Ship to 58-C', N'Calle Dr. Jorge Cash 5678', N'México D.F.', NULL, N'10263', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10475, 76, 9, '20070314 00:00:00.000', '20070411 00:00:00.000', '20070404 00:00:00.000', 1, 68.52, N'Ship to 76-C', N'Boulevard Tirou, 0123', N'Charleroi', NULL, N'10319', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10476, 35, 8, '20070317 00:00:00.000', '20070414 00:00:00.000', '20070324 00:00:00.000', 3, 4.41, N'Destination SXYQX', N'Carrera 0123 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10198', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10477, 60, 5, '20070317 00:00:00.000', '20070414 00:00:00.000', '20070325 00:00:00.000', 2, 13.02, N'Ship to 60-A', N'Estrada da saúde n. 2345', N'Lisboa', NULL, N'10270', N'Portugal'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10478, 84, 2, '20070318 00:00:00.000', '20070401 00:00:00.000', '20070326 00:00:00.000', 3, 4.81, N'Ship to 84-C', N'5678, rue du Commerce', N'Lyon', NULL, N'10344', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10479, 65, 3, '20070319 00:00:00.000', '20070416 00:00:00.000', '20070321 00:00:00.000', 3, 708.95, N'Ship to 65-C', N'9012 Milton Dr.', N'Albuquerque', N'NM', N'10287', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10480, 23, 6, '20070320 00:00:00.000', '20070417 00:00:00.000', '20070324 00:00:00.000', 2, 1.35, N'Destination AGPCO', N'6789, chaussée de Tournai', N'Lille', NULL, N'10164', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10481, 67, 8, '20070320 00:00:00.000', '20070417 00:00:00.000', '20070325 00:00:00.000', 2, 64.33, N'Ship to 67-A', N'Av. Copacabana, 3456', N'Rio de Janeiro', N'RJ', N'10291', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10482, 43, 1, '20070321 00:00:00.000', '20070418 00:00:00.000', '20070410 00:00:00.000', 3, 7.48, N'Ship to 43-B', N'3456 Orchestra Terrace', N'Walla Walla', N'WA', N'10221', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10483, 89, 7, '20070324 00:00:00.000', '20070421 00:00:00.000', '20070425 00:00:00.000', 2, 15.28, N'Ship to 89-A', N'7890 - 12th Ave. S.', N'Seattle', N'WA', N'10356', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10484, 11, 3, '20070324 00:00:00.000', '20070421 00:00:00.000', '20070401 00:00:00.000', 3, 6.88, N'Destination DLEUN', N'Fauntleroy Circus 4567', N'London', NULL, N'10132', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10485, 47, 4, '20070325 00:00:00.000', '20070408 00:00:00.000', '20070331 00:00:00.000', 2, 64.45, N'Ship to 47-B', N'Ave. 5 de Mayo Porlamar 4567', N'I. de Margarita', N'Nueva Esparta', N'10231', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10486, 35, 1, '20070326 00:00:00.000', '20070423 00:00:00.000', '20070402 00:00:00.000', 2, 30.53, N'Destination UOUWK', N'Carrera 9012 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10197', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10487, 62, 2, '20070326 00:00:00.000', '20070423 00:00:00.000', '20070328 00:00:00.000', 2, 71.07, N'Ship to 62-B', N'Alameda dos Canàrios, 9012', N'Sao Paulo', N'SP', N'10277', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10488, 25, 8, '20070327 00:00:00.000', '20070424 00:00:00.000', '20070402 00:00:00.000', 2, 4.93, N'Destination VAPXU', N'Berliner Platz 0123', N'München', NULL, N'10168', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10489, 59, 6, '20070328 00:00:00.000', '20070425 00:00:00.000', '20070409 00:00:00.000', 2, 5.29, N'Ship to 59-C', N'Geislweg 8901', N'Salzburg', NULL, N'10266', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10490, 35, 7, '20070331 00:00:00.000', '20070428 00:00:00.000', '20070403 00:00:00.000', 2, 210.19, N'Destination JYDLM', N'Carrera1234 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10199', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10491, 28, 8, '20070331 00:00:00.000', '20070428 00:00:00.000', '20070408 00:00:00.000', 3, 16.96, N'Destination OTSWR', N'Jardim das rosas n. 9012', N'Lisboa', NULL, N'10177', N'Portugal'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10492, 10, 3, '20070401 00:00:00.000', '20070429 00:00:00.000', '20070411 00:00:00.000', 1, 62.89, N'Destination XJIBQ', N'1234 Tsawassen Blvd.', N'Tsawassen', N'BC', N'10129', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10493, 41, 4, '20070402 00:00:00.000', '20070430 00:00:00.000', '20070410 00:00:00.000', 3, 10.64, N'Destination OLJND', N'8901 rue Alsace-Lorraine', N'Toulouse', NULL, N'10216', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10494, 15, 4, '20070402 00:00:00.000', '20070430 00:00:00.000', '20070409 00:00:00.000', 2, 65.99, N'Destination EVHYA', N'Av. dos Lusíadas, 3456', N'Sao Paulo', N'SP', N'10141', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10495, 42, 3, '20070403 00:00:00.000', '20070501 00:00:00.000', '20070411 00:00:00.000', 3, 4.65, N'Ship to 42-C', N'2345 Elm St.', N'Vancouver', N'BC', N'10220', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10496, 81, 7, '20070404 00:00:00.000', '20070502 00:00:00.000', '20070407 00:00:00.000', 2, 46.77, N'Ship to 81-C', N'Av. Inês de Castro, 7890', N'Sao Paulo', N'SP', N'10336', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10497, 44, 7, '20070404 00:00:00.000', '20070502 00:00:00.000', '20070407 00:00:00.000', 1, 36.21, N'Ship to 44-A', N'Magazinweg 4567', N'Frankfurt a.M.', NULL, N'10222', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10498, 35, 8, '20070407 00:00:00.000', '20070505 00:00:00.000', '20070411 00:00:00.000', 2, 29.75, N'Destination SXYQX', N'Carrera 0123 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10198', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10499, 46, 4, '20070408 00:00:00.000', '20070506 00:00:00.000', '20070416 00:00:00.000', 2, 102.02, N'Ship to 46-C', N'Carrera 2345 con Ave. Bolívar #65-98 Llano Largo', N'Barquisimeto', N'Lara', N'10229', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10500, 41, 6, '20070409 00:00:00.000', '20070507 00:00:00.000', '20070417 00:00:00.000', 1, 42.68, N'Destination OLJND', N'8901 rue Alsace-Lorraine', N'Toulouse', NULL, N'10216', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10501, 6, 9, '20070409 00:00:00.000', '20070507 00:00:00.000', '20070416 00:00:00.000', 3, 8.85, N'Ship to 6-C', N'Forsterstr. 4567', N'Mannheim', NULL, N'10302', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10502, 58, 2, '20070410 00:00:00.000', '20070508 00:00:00.000', '20070429 00:00:00.000', 1, 69.32, N'Ship to 58-B', N'Calle Dr. Jorge Cash 4567', N'México D.F.', NULL, N'10262', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10503, 37, 6, '20070411 00:00:00.000', '20070509 00:00:00.000', '20070416 00:00:00.000', 2, 16.74, N'Destination ATSOA', N'4567 Johnstown Road', N'Cork', N'Co. Cork', N'10202', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10504, 89, 4, '20070411 00:00:00.000', '20070509 00:00:00.000', '20070418 00:00:00.000', 3, 59.13, N'Ship to 89-B', N'8901 - 12th Ave. S.', N'Seattle', N'WA', N'10357', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10505, 51, 3, '20070414 00:00:00.000', '20070512 00:00:00.000', '20070421 00:00:00.000', 3, 7.13, N'Ship to 51-B', N'7890 rue St. Laurent', N'Montréal', N'Québec', N'10245', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10506, 39, 9, '20070415 00:00:00.000', '20070513 00:00:00.000', '20070502 00:00:00.000', 2, 21.19, N'Destination DKMQA', N'Maubelstr. 0123', N'Brandenburg', NULL, N'10208', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10507, 3, 7, '20070415 00:00:00.000', '20070513 00:00:00.000', '20070422 00:00:00.000', 1, 47.45, N'Destination FQFLS', N'Mataderos 3456', N'México D.F.', NULL, N'10211', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10508, 56, 1, '20070416 00:00:00.000', '20070514 00:00:00.000', '20070513 00:00:00.000', 2, 4.99, N'Ship to 56-C', N'Mehrheimerstr. 2345', N'Köln', NULL, N'10260', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10509, 6, 4, '20070417 00:00:00.000', '20070515 00:00:00.000', '20070429 00:00:00.000', 1, 0.15, N'Ship to 6-A', N'Forsterstr. 2345', N'Mannheim', NULL, N'10300', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10510, 71, 6, '20070418 00:00:00.000', '20070516 00:00:00.000', '20070428 00:00:00.000', 3, 367.63, N'Ship to 71-A', N'7890 Suffolk Ln.', N'Boise', N'ID', N'10305', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10511, 9, 4, '20070418 00:00:00.000', '20070516 00:00:00.000', '20070421 00:00:00.000', 3, 350.64, N'Ship to 9-B', N'9012, rue des Bouchers', N'Marseille', NULL, N'10368', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10512, 21, 7, '20070421 00:00:00.000', '20070519 00:00:00.000', '20070424 00:00:00.000', 2, 3.53, N'Destination RNSMS', N'Rua Orós, 2345', N'Sao Paulo', N'SP', N'10160', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10513, 86, 7, '20070422 00:00:00.000', '20070603 00:00:00.000', '20070428 00:00:00.000', 1, 105.65, N'Ship to 86-A', N'Adenauerallee 8901', N'Stuttgart', NULL, N'10347', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10514, 20, 3, '20070422 00:00:00.000', '20070520 00:00:00.000', '20070516 00:00:00.000', 2, 789.95, N'Destination CUVPF', N'Kirchgasse 1234', N'Graz', NULL, N'10159', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10515, 63, 2, '20070423 00:00:00.000', '20070507 00:00:00.000', '20070523 00:00:00.000', 1, 204.47, N'Ship to 63-B', N'Taucherstraße 2345', N'Cunewalde', NULL, N'10280', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10516, 37, 2, '20070424 00:00:00.000', '20070522 00:00:00.000', '20070501 00:00:00.000', 3, 62.78, N'Destination DGKOU', N'6789 Johnstown Road', N'Cork', N'Co. Cork', N'10204', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10517, 53, 3, '20070424 00:00:00.000', '20070522 00:00:00.000', '20070429 00:00:00.000', 3, 32.07, N'Ship to 53-A', N'South House 2345 Queensbridge', N'London', NULL, N'10250', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10518, 80, 4, '20070425 00:00:00.000', '20070509 00:00:00.000', '20070505 00:00:00.000', 2, 218.15, N'Ship to 80-B', N'Avda. Azteca 4567', N'México D.F.', NULL, N'10333', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10519, 14, 6, '20070428 00:00:00.000', '20070526 00:00:00.000', '20070501 00:00:00.000', 3, 91.76, N'Destination NRTZZ', N'Hauptstr. 0123', N'Bern', NULL, N'10138', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10520, 70, 7, '20070429 00:00:00.000', '20070527 00:00:00.000', '20070501 00:00:00.000', 1, 13.37, N'Ship to 70-B', N'Erling Skakkes gate 5678', N'Stavern', NULL, N'10303', N'Norway'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10521, 12, 8, '20070429 00:00:00.000', '20070527 00:00:00.000', '20070502 00:00:00.000', 2, 17.22, N'Destination QTHBC', N'Cerrito 6789', N'Buenos Aires', NULL, N'10134', N'Argentina'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10522, 44, 4, '20070430 00:00:00.000', '20070528 00:00:00.000', '20070506 00:00:00.000', 1, 45.33, N'Ship to 44-A', N'Magazinweg 4567', N'Frankfurt a.M.', NULL, N'10222', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10523, 72, 7, '20070501 00:00:00.000', '20070529 00:00:00.000', '20070530 00:00:00.000', 2, 77.63, N'Ship to 72-C', N'1234 Wadhurst Rd.', N'London', NULL, N'10309', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10524, 5, 1, '20070501 00:00:00.000', '20070529 00:00:00.000', '20070507 00:00:00.000', 2, 244.79, N'Ship to 5-A', N'Berguvsvägen 9012', N'Luleå', NULL, N'10267', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10525, 9, 1, '20070502 00:00:00.000', '20070530 00:00:00.000', '20070523 00:00:00.000', 2, 11.06, N'Ship to 9-B', N'9012, rue des Bouchers', N'Marseille', NULL, N'10368', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10526, 87, 4, '20070505 00:00:00.000', '20070602 00:00:00.000', '20070515 00:00:00.000', 2, 58.59, N'Ship to 87-C', N'Torikatu 3456', N'Oulu', NULL, N'10352', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10527, 63, 7, '20070505 00:00:00.000', '20070602 00:00:00.000', '20070507 00:00:00.000', 1, 41.90, N'Ship to 63-B', N'Taucherstraße 2345', N'Cunewalde', NULL, N'10280', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10528, 32, 6, '20070506 00:00:00.000', '20070520 00:00:00.000', '20070509 00:00:00.000', 2, 3.35, N'Destination LLUXZ', N'1234 Baker Blvd.', N'Eugene', N'OR', N'10189', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10529, 50, 5, '20070507 00:00:00.000', '20070604 00:00:00.000', '20070509 00:00:00.000', 2, 66.69, N'Ship to 50-B', N'Rue Joseph-Bens 4567', N'Bruxelles', NULL, N'10242', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10530, 59, 3, '20070508 00:00:00.000', '20070605 00:00:00.000', '20070512 00:00:00.000', 2, 339.22, N'Ship to 59-C', N'Geislweg 8901', N'Salzburg', NULL, N'10266', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10531, 54, 7, '20070508 00:00:00.000', '20070605 00:00:00.000', '20070519 00:00:00.000', 1, 8.12, N'Ship to 54-A', N'Ing. Gustavo Moncada 4567 Piso 20-A', N'Buenos Aires', NULL, N'10252', N'Argentina'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10532, 19, 7, '20070509 00:00:00.000', '20070606 00:00:00.000', '20070512 00:00:00.000', 3, 74.46, N'Destination QTKCU', N'3456 King George', N'London', NULL, N'10151', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10533, 24, 8, '20070512 00:00:00.000', '20070609 00:00:00.000', '20070522 00:00:00.000', 1, 188.04, N'Destination KBSBN', N'Åkergatan 9012', N'Bräcke', NULL, N'10167', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10534, 44, 8, '20070512 00:00:00.000', '20070609 00:00:00.000', '20070514 00:00:00.000', 2, 27.94, N'Ship to 44-A', N'Magazinweg 4567', N'Frankfurt a.M.', NULL, N'10222', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10535, 3, 4, '20070513 00:00:00.000', '20070610 00:00:00.000', '20070521 00:00:00.000', 1, 15.64, N'Destination FQFLS', N'Mataderos 3456', N'México D.F.', NULL, N'10211', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10536, 44, 3, '20070514 00:00:00.000', '20070611 00:00:00.000', '20070606 00:00:00.000', 2, 58.88, N'Ship to 44-B', N'Magazinweg 5678', N'Frankfurt a.M.', NULL, N'10223', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10537, 68, 1, '20070514 00:00:00.000', '20070528 00:00:00.000', '20070519 00:00:00.000', 1, 78.85, N'Ship to 68-B', N'Starenweg 7890', N'Genève', NULL, N'10295', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10538, 11, 9, '20070515 00:00:00.000', '20070612 00:00:00.000', '20070516 00:00:00.000', 3, 4.87, N'Destination DLEUN', N'Fauntleroy Circus 4567', N'London', NULL, N'10132', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10539, 11, 6, '20070516 00:00:00.000', '20070613 00:00:00.000', '20070523 00:00:00.000', 3, 12.36, N'Destination DLEUN', N'Fauntleroy Circus 4567', N'London', NULL, N'10132', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10540, 63, 3, '20070519 00:00:00.000', '20070616 00:00:00.000', '20070613 00:00:00.000', 3, 1007.64, N'Ship to 63-C', N'Taucherstraße 3456', N'Cunewalde', NULL, N'10281', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10541, 34, 2, '20070519 00:00:00.000', '20070616 00:00:00.000', '20070529 00:00:00.000', 1, 68.65, N'Destination SCQXA', N'Rua do Paço, 7890', N'Rio de Janeiro', N'RJ', N'10195', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10542, 39, 1, '20070520 00:00:00.000', '20070617 00:00:00.000', '20070526 00:00:00.000', 3, 10.95, N'Destination DKMQA', N'Maubelstr. 0123', N'Brandenburg', NULL, N'10208', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10543, 46, 8, '20070521 00:00:00.000', '20070618 00:00:00.000', '20070523 00:00:00.000', 2, 48.17, N'Ship to 46-B', N'Carrera 1234 con Ave. Bolívar #65-98 Llano Largo', N'Barquisimeto', N'Lara', N'10228', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10544, 48, 4, '20070521 00:00:00.000', '20070618 00:00:00.000', '20070530 00:00:00.000', 1, 24.91, N'Ship to 48-C', N'7890 Chiaroscuro Rd.', N'Portland', N'OR', N'10234', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10545, 43, 8, '20070522 00:00:00.000', '20070619 00:00:00.000', '20070626 00:00:00.000', 2, 11.92, N'Ship to 43-B', N'3456 Orchestra Terrace', N'Walla Walla', N'WA', N'10221', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10546, 84, 1, '20070523 00:00:00.000', '20070620 00:00:00.000', '20070527 00:00:00.000', 3, 194.72, N'Ship to 84-C', N'5678, rue du Commerce', N'Lyon', NULL, N'10344', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10547, 72, 3, '20070523 00:00:00.000', '20070620 00:00:00.000', '20070602 00:00:00.000', 2, 178.43, N'Ship to 72-C', N'1234 Wadhurst Rd.', N'London', NULL, N'10309', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10548, 79, 3, '20070526 00:00:00.000', '20070623 00:00:00.000', '20070602 00:00:00.000', 2, 1.43, N'Ship to 79-A', N'Luisenstr. 7890', N'Münster', NULL, N'10326', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10549, 63, 5, '20070527 00:00:00.000', '20070610 00:00:00.000', '20070530 00:00:00.000', 1, 171.24, N'Ship to 63-C', N'Taucherstraße 3456', N'Cunewalde', NULL, N'10281', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10550, 30, 7, '20070528 00:00:00.000', '20070625 00:00:00.000', '20070606 00:00:00.000', 3, 4.32, N'Destination GGQIR', N'C/ Romero, 6789', N'Sevilla', NULL, N'10184', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10551, 28, 4, '20070528 00:00:00.000', '20070709 00:00:00.000', '20070606 00:00:00.000', 3, 72.95, N'Destination OTSWR', N'Jardim das rosas n. 9012', N'Lisboa', NULL, N'10177', N'Portugal'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10552, 35, 2, '20070529 00:00:00.000', '20070626 00:00:00.000', '20070605 00:00:00.000', 1, 83.22, N'Destination UOUWK', N'Carrera 9012 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10197', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10553, 87, 2, '20070530 00:00:00.000', '20070627 00:00:00.000', '20070603 00:00:00.000', 2, 149.49, N'Ship to 87-B', N'Torikatu 2345', N'Oulu', NULL, N'10351', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10554, 56, 4, '20070530 00:00:00.000', '20070627 00:00:00.000', '20070605 00:00:00.000', 3, 120.97, N'Ship to 56-C', N'Mehrheimerstr. 2345', N'Köln', NULL, N'10260', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10555, 71, 6, '20070602 00:00:00.000', '20070630 00:00:00.000', '20070604 00:00:00.000', 3, 252.49, N'Ship to 71-B', N'8901 Suffolk Ln.', N'Boise', N'ID', N'10306', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10556, 73, 2, '20070603 00:00:00.000', '20070715 00:00:00.000', '20070613 00:00:00.000', 1, 9.80, N'Ship to 73-A', N'Vinbæltet 1234', N'Kobenhavn', NULL, N'10310', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10557, 44, 9, '20070603 00:00:00.000', '20070617 00:00:00.000', '20070606 00:00:00.000', 2, 96.72, N'Ship to 44-C', N'Magazinweg 6789', N'Frankfurt a.M.', NULL, N'10224', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10558, 4, 1, '20070604 00:00:00.000', '20070702 00:00:00.000', '20070610 00:00:00.000', 2, 72.97, N'Ship to 4-B', N'Brook Farm Stratford St. Mary 1234', N'Colchester', N'Essex', N'10239', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10559, 7, 6, '20070605 00:00:00.000', '20070703 00:00:00.000', '20070613 00:00:00.000', 1, 8.05, N'Ship to 7-B', N'1234, place Kléber', N'Strasbourg', NULL, N'10330', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10560, 25, 8, '20070606 00:00:00.000', '20070704 00:00:00.000', '20070609 00:00:00.000', 1, 36.65, N'Destination QOCBL', N'Berliner Platz 1234', N'München', NULL, N'10169', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10561, 24, 2, '20070606 00:00:00.000', '20070704 00:00:00.000', '20070609 00:00:00.000', 2, 242.21, N'Destination YCMPK', N'Åkergatan 8901', N'Bräcke', NULL, N'10166', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10562, 66, 1, '20070609 00:00:00.000', '20070707 00:00:00.000', '20070612 00:00:00.000', 1, 22.95, N'Ship to 66-B', N'Strada Provinciale 1234', N'Reggio Emilia', NULL, N'10289', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10563, 67, 2, '20070610 00:00:00.000', '20070722 00:00:00.000', '20070624 00:00:00.000', 2, 60.43, N'Ship to 67-B', N'Av. Copacabana, 4567', N'Rio de Janeiro', N'RJ', N'10292', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10564, 65, 4, '20070610 00:00:00.000', '20070708 00:00:00.000', '20070616 00:00:00.000', 3, 13.75, N'Ship to 65-B', N'8901 Milton Dr.', N'Albuquerque', N'NM', N'10286', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10565, 51, 8, '20070611 00:00:00.000', '20070709 00:00:00.000', '20070618 00:00:00.000', 2, 7.15, N'Ship to 51-C', N'8901 rue St. Laurent', N'Montréal', N'Québec', N'10246', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10566, 7, 9, '20070612 00:00:00.000', '20070710 00:00:00.000', '20070618 00:00:00.000', 1, 88.40, N'Ship to 7-C', N'2345, place Kléber', N'Strasbourg', NULL, N'10331', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10567, 37, 1, '20070612 00:00:00.000', '20070710 00:00:00.000', '20070617 00:00:00.000', 1, 33.97, N'Destination DGKOU', N'6789 Johnstown Road', N'Cork', N'Co. Cork', N'10204', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10568, 29, 3, '20070613 00:00:00.000', '20070711 00:00:00.000', '20070709 00:00:00.000', 3, 6.54, N'Destination VPNNG', N'Rambla de Cataluña, 0123', N'Barcelona', NULL, N'10178', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10569, 65, 5, '20070616 00:00:00.000', '20070714 00:00:00.000', '20070711 00:00:00.000', 1, 58.98, N'Ship to 65-B', N'8901 Milton Dr.', N'Albuquerque', N'NM', N'10286', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10570, 51, 3, '20070617 00:00:00.000', '20070715 00:00:00.000', '20070619 00:00:00.000', 3, 188.99, N'Ship to 51-C', N'8901 rue St. Laurent', N'Montréal', N'Québec', N'10246', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10571, 20, 8, '20070617 00:00:00.000', '20070729 00:00:00.000', '20070704 00:00:00.000', 3, 26.06, N'Destination RVDMF', N'Kirchgasse 9012', N'Graz', NULL, N'10157', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10572, 5, 3, '20070618 00:00:00.000', '20070716 00:00:00.000', '20070625 00:00:00.000', 2, 116.43, N'Ship to 5-B', N'Berguvsvägen 0123', N'Luleå', NULL, N'10268', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10573, 3, 7, '20070619 00:00:00.000', '20070717 00:00:00.000', '20070620 00:00:00.000', 3, 84.84, N'Destination LANNN', N'Mataderos 4567', N'México D.F.', NULL, N'10212', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10574, 82, 4, '20070619 00:00:00.000', '20070717 00:00:00.000', '20070630 00:00:00.000', 2, 37.60, N'Ship to 82-A', N'8901 DaVinci Blvd.', N'Kirkland', N'WA', N'10337', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10575, 52, 5, '20070620 00:00:00.000', '20070704 00:00:00.000', '20070630 00:00:00.000', 1, 127.34, N'Ship to 52-C', N'Heerstr. 1234', N'Leipzig', NULL, N'10249', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10576, 80, 3, '20070623 00:00:00.000', '20070707 00:00:00.000', '20070630 00:00:00.000', 3, 18.56, N'Ship to 80-C', N'Avda. Azteca 5678', N'México D.F.', NULL, N'10334', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10577, 82, 9, '20070623 00:00:00.000', '20070804 00:00:00.000', '20070630 00:00:00.000', 2, 25.41, N'Ship to 82-B', N'9012 DaVinci Blvd.', N'Kirkland', N'WA', N'10338', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10578, 11, 4, '20070624 00:00:00.000', '20070722 00:00:00.000', '20070725 00:00:00.000', 3, 29.60, N'Destination NZASL', N'Fauntleroy Circus 5678', N'London', NULL, N'10133', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10579, 45, 1, '20070625 00:00:00.000', '20070723 00:00:00.000', '20070704 00:00:00.000', 2, 13.73, N'Ship to 45-C', N'9012 Polk St. Suite 5', N'San Francisco', N'CA', N'10226', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10580, 56, 4, '20070626 00:00:00.000', '20070724 00:00:00.000', '20070701 00:00:00.000', 3, 75.89, N'Ship to 56-C', N'Mehrheimerstr. 2345', N'Köln', NULL, N'10260', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10581, 21, 3, '20070626 00:00:00.000', '20070724 00:00:00.000', '20070702 00:00:00.000', 1, 3.01, N'Destination SSYXZ', N'Rua Orós, 3456', N'Sao Paulo', N'SP', N'10161', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10582, 6, 3, '20070627 00:00:00.000', '20070725 00:00:00.000', '20070714 00:00:00.000', 2, 27.71, N'Ship to 6-A', N'Forsterstr. 2345', N'Mannheim', NULL, N'10300', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10583, 87, 2, '20070630 00:00:00.000', '20070728 00:00:00.000', '20070704 00:00:00.000', 2, 7.28, N'Ship to 87-C', N'Torikatu 3456', N'Oulu', NULL, N'10352', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10584, 7, 4, '20070630 00:00:00.000', '20070728 00:00:00.000', '20070704 00:00:00.000', 1, 59.14, N'Ship to 7-B', N'1234, place Kléber', N'Strasbourg', NULL, N'10330', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10585, 88, 7, '20070701 00:00:00.000', '20070729 00:00:00.000', '20070710 00:00:00.000', 1, 13.41, N'Ship to 88-A', N'Rua do Mercado, 4567', N'Resende', N'SP', N'10353', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10586, 66, 9, '20070702 00:00:00.000', '20070730 00:00:00.000', '20070709 00:00:00.000', 1, 0.48, N'Ship to 66-B', N'Strada Provinciale 1234', N'Reggio Emilia', NULL, N'10289', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10587, 61, 1, '20070702 00:00:00.000', '20070730 00:00:00.000', '20070709 00:00:00.000', 1, 62.52, N'Ship to 61-C', N'Rua da Panificadora, 7890', N'Rio de Janeiro', N'RJ', N'10275', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10588, 63, 2, '20070703 00:00:00.000', '20070731 00:00:00.000', '20070710 00:00:00.000', 3, 194.67, N'Ship to 63-A', N'Taucherstraße 1234', N'Cunewalde', NULL, N'10279', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10589, 32, 8, '20070704 00:00:00.000', '20070801 00:00:00.000', '20070714 00:00:00.000', 2, 4.42, N'Destination AVQUS', N'2345 Baker Blvd.', N'Eugene', N'OR', N'10190', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10590, 51, 4, '20070707 00:00:00.000', '20070804 00:00:00.000', '20070714 00:00:00.000', 3, 44.77, N'Ship to 51-B', N'7890 rue St. Laurent', N'Montréal', N'Québec', N'10245', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10591, 83, 1, '20070707 00:00:00.000', '20070721 00:00:00.000', '20070716 00:00:00.000', 1, 55.92, N'Ship to 83-A', N'Smagsloget 0123', N'Århus', NULL, N'10339', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10592, 44, 3, '20070708 00:00:00.000', '20070805 00:00:00.000', '20070716 00:00:00.000', 1, 32.10, N'Ship to 44-B', N'Magazinweg 5678', N'Frankfurt a.M.', NULL, N'10223', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10593, 44, 7, '20070709 00:00:00.000', '20070806 00:00:00.000', '20070813 00:00:00.000', 2, 174.20, N'Ship to 44-C', N'Magazinweg 6789', N'Frankfurt a.M.', NULL, N'10224', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10594, 55, 3, '20070709 00:00:00.000', '20070806 00:00:00.000', '20070716 00:00:00.000', 2, 5.24, N'Ship to 55-B', N'8901 Bering St.', N'Anchorage', N'AK', N'10256', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10595, 20, 2, '20070710 00:00:00.000', '20070807 00:00:00.000', '20070714 00:00:00.000', 1, 96.78, N'Destination CUVPF', N'Kirchgasse 1234', N'Graz', NULL, N'10159', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10596, 89, 8, '20070711 00:00:00.000', '20070808 00:00:00.000', '20070812 00:00:00.000', 1, 16.34, N'Ship to 89-C', N'9012 - 12th Ave. S.', N'Seattle', N'WA', N'10358', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10597, 59, 7, '20070711 00:00:00.000', '20070808 00:00:00.000', '20070718 00:00:00.000', 3, 35.12, N'Ship to 59-B', N'Geislweg 7890', N'Salzburg', NULL, N'10265', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10598, 65, 1, '20070714 00:00:00.000', '20070811 00:00:00.000', '20070718 00:00:00.000', 3, 44.42, N'Ship to 65-C', N'9012 Milton Dr.', N'Albuquerque', N'NM', N'10287', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10599, 11, 6, '20070715 00:00:00.000', '20070826 00:00:00.000', '20070721 00:00:00.000', 3, 29.98, N'Destination DLEUN', N'Fauntleroy Circus 4567', N'London', NULL, N'10132', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10600, 36, 4, '20070716 00:00:00.000', '20070813 00:00:00.000', '20070721 00:00:00.000', 1, 45.13, N'Destination HOHCR', N'City Center Plaza 3456 Main St.', N'Elgin', N'OR', N'10201', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10601, 35, 7, '20070716 00:00:00.000', '20070827 00:00:00.000', '20070722 00:00:00.000', 1, 58.30, N'Destination UOUWK', N'Carrera 9012 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10197', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10602, 83, 8, '20070717 00:00:00.000', '20070814 00:00:00.000', '20070722 00:00:00.000', 2, 2.92, N'Ship to 83-A', N'Smagsloget 0123', N'Århus', NULL, N'10339', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10603, 71, 8, '20070718 00:00:00.000', '20070815 00:00:00.000', '20070808 00:00:00.000', 2, 48.77, N'Ship to 71-C', N'9012 Suffolk Ln.', N'Boise', N'ID', N'10307', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10604, 28, 1, '20070718 00:00:00.000', '20070815 00:00:00.000', '20070729 00:00:00.000', 1, 7.46, N'Destination CIRQO', N'Jardim das rosas n. 8901', N'Lisboa', NULL, N'10176', N'Portugal'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10605, 51, 1, '20070721 00:00:00.000', '20070818 00:00:00.000', '20070729 00:00:00.000', 2, 379.13, N'Ship to 51-B', N'7890 rue St. Laurent', N'Montréal', N'Québec', N'10245', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10606, 81, 4, '20070722 00:00:00.000', '20070819 00:00:00.000', '20070731 00:00:00.000', 3, 79.40, N'Ship to 81-C', N'Av. Inês de Castro, 7890', N'Sao Paulo', N'SP', N'10336', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10607, 71, 5, '20070722 00:00:00.000', '20070819 00:00:00.000', '20070725 00:00:00.000', 1, 200.24, N'Ship to 71-C', N'9012 Suffolk Ln.', N'Boise', N'ID', N'10307', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10608, 79, 4, '20070723 00:00:00.000', '20070820 00:00:00.000', '20070801 00:00:00.000', 2, 27.79, N'Ship to 79-C', N'Luisenstr. 9012', N'Münster', NULL, N'10328', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10609, 18, 7, '20070724 00:00:00.000', '20070821 00:00:00.000', '20070730 00:00:00.000', 2, 1.85, N'Destination SNPXM', N'0123, rue des Cinquante Otages', N'Nantes', NULL, N'10148', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10610, 41, 8, '20070725 00:00:00.000', '20070822 00:00:00.000', '20070806 00:00:00.000', 1, 26.78, N'Ship to 41-C', N'0123 rue Alsace-Lorraine', N'Toulouse', NULL, N'10218', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10611, 91, 6, '20070725 00:00:00.000', '20070822 00:00:00.000', '20070801 00:00:00.000', 2, 80.65, N'Ship to 91-B', N'ul. Filtrowa 6789', N'Warszawa', NULL, N'10365', N'Poland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10612, 71, 1, '20070728 00:00:00.000', '20070825 00:00:00.000', '20070801 00:00:00.000', 2, 544.08, N'Ship to 71-A', N'7890 Suffolk Ln.', N'Boise', N'ID', N'10305', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10613, 35, 4, '20070729 00:00:00.000', '20070826 00:00:00.000', '20070801 00:00:00.000', 2, 8.11, N'Destination JYDLM', N'Carrera1234 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10199', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10614, 6, 8, '20070729 00:00:00.000', '20070826 00:00:00.000', '20070801 00:00:00.000', 3, 1.93, N'Ship to 6-A', N'Forsterstr. 2345', N'Mannheim', NULL, N'10300', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10615, 90, 2, '20070730 00:00:00.000', '20070827 00:00:00.000', '20070806 00:00:00.000', 3, 0.75, N'Ship to 90-B', N'Keskuskatu 3456', N'Helsinki', NULL, N'10362', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10616, 32, 1, '20070731 00:00:00.000', '20070828 00:00:00.000', '20070805 00:00:00.000', 2, 116.53, N'Destination LLUXZ', N'1234 Baker Blvd.', N'Eugene', N'OR', N'10189', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10617, 32, 4, '20070731 00:00:00.000', '20070828 00:00:00.000', '20070804 00:00:00.000', 2, 18.53, N'Destination AVQUS', N'2345 Baker Blvd.', N'Eugene', N'OR', N'10190', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10618, 51, 1, '20070801 00:00:00.000', '20070912 00:00:00.000', '20070808 00:00:00.000', 1, 154.68, N'Ship to 51-C', N'8901 rue St. Laurent', N'Montréal', N'Québec', N'10246', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10619, 51, 3, '20070804 00:00:00.000', '20070901 00:00:00.000', '20070807 00:00:00.000', 3, 91.05, N'Ship to 51-B', N'7890 rue St. Laurent', N'Montréal', N'Québec', N'10245', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10620, 42, 2, '20070805 00:00:00.000', '20070902 00:00:00.000', '20070814 00:00:00.000', 3, 0.94, N'Ship to 42-A', N'1234 Elm St.', N'Vancouver', N'BC', N'10219', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10621, 38, 4, '20070805 00:00:00.000', '20070902 00:00:00.000', '20070811 00:00:00.000', 2, 23.73, N'Destination LMVGS', N'Garden House Crowther Way 8901', N'Cowes', N'Isle of Wight', N'10206', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10622, 67, 4, '20070806 00:00:00.000', '20070903 00:00:00.000', '20070811 00:00:00.000', 3, 50.97, N'Ship to 67-A', N'Av. Copacabana, 3456', N'Rio de Janeiro', N'RJ', N'10291', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10623, 25, 8, '20070807 00:00:00.000', '20070904 00:00:00.000', '20070812 00:00:00.000', 2, 97.18, N'Destination VAPXU', N'Berliner Platz 0123', N'München', NULL, N'10168', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10624, 78, 4, '20070807 00:00:00.000', '20070904 00:00:00.000', '20070819 00:00:00.000', 2, 94.80, N'Ship to 78-C', N'6789 Grizzly Peak Rd.', N'Butte', N'MT', N'10325', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10625, 2, 3, '20070808 00:00:00.000', '20070905 00:00:00.000', '20070814 00:00:00.000', 1, 43.90, N'Destination QOTQA', N'Avda. de la Constitución 3456', N'México D.F.', NULL, N'10181', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10626, 5, 1, '20070811 00:00:00.000', '20070908 00:00:00.000', '20070820 00:00:00.000', 2, 138.69, N'Ship to 5-A', N'Berguvsvägen 9012', N'Luleå', NULL, N'10267', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10627, 71, 8, '20070811 00:00:00.000', '20070922 00:00:00.000', '20070821 00:00:00.000', 3, 107.46, N'Ship to 71-B', N'8901 Suffolk Ln.', N'Boise', N'ID', N'10306', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10628, 7, 4, '20070812 00:00:00.000', '20070909 00:00:00.000', '20070820 00:00:00.000', 3, 30.36, N'Ship to 7-B', N'1234, place Kléber', N'Strasbourg', NULL, N'10330', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10629, 30, 4, '20070812 00:00:00.000', '20070909 00:00:00.000', '20070820 00:00:00.000', 3, 85.46, N'Destination IIYDD', N'C/ Romero, 5678', N'Sevilla', NULL, N'10183', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10630, 39, 1, '20070813 00:00:00.000', '20070910 00:00:00.000', '20070819 00:00:00.000', 2, 32.35, N'Destination RMBHM', N'Maubelstr. 1234', N'Brandenburg', NULL, N'10209', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10631, 41, 8, '20070814 00:00:00.000', '20070911 00:00:00.000', '20070815 00:00:00.000', 1, 0.87, N'Destination OLJND', N'8901 rue Alsace-Lorraine', N'Toulouse', NULL, N'10216', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10632, 86, 8, '20070814 00:00:00.000', '20070911 00:00:00.000', '20070819 00:00:00.000', 1, 41.38, N'Ship to 86-C', N'Adenauerallee 0123', N'Stuttgart', NULL, N'10349', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10633, 20, 7, '20070815 00:00:00.000', '20070912 00:00:00.000', '20070818 00:00:00.000', 3, 477.90, N'Destination FFXKT', N'Kirchgasse 0123', N'Graz', NULL, N'10158', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10634, 23, 4, '20070815 00:00:00.000', '20070912 00:00:00.000', '20070821 00:00:00.000', 3, 487.38, N'Destination AGPCO', N'6789, chaussée de Tournai', N'Lille', NULL, N'10164', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10635, 49, 8, '20070818 00:00:00.000', '20070915 00:00:00.000', '20070821 00:00:00.000', 3, 47.46, N'Ship to 49-A', N'Via Ludovico il Moro 8901', N'Bergamo', NULL, N'10235', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10636, 87, 4, '20070819 00:00:00.000', '20070916 00:00:00.000', '20070826 00:00:00.000', 1, 1.15, N'Ship to 87-A', N'Torikatu 1234', N'Oulu', NULL, N'10350', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10637, 62, 6, '20070819 00:00:00.000', '20070916 00:00:00.000', '20070826 00:00:00.000', 1, 201.29, N'Ship to 62-C', N'Alameda dos Canàrios, 0123', N'Sao Paulo', N'SP', N'10278', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10638, 47, 3, '20070820 00:00:00.000', '20070917 00:00:00.000', '20070901 00:00:00.000', 1, 158.44, N'Ship to 47-B', N'Ave. 5 de Mayo Porlamar 4567', N'I. de Margarita', N'Nueva Esparta', N'10231', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10639, 70, 7, '20070820 00:00:00.000', '20070917 00:00:00.000', '20070827 00:00:00.000', 3, 38.64, N'Ship to 70-B', N'Erling Skakkes gate 5678', N'Stavern', NULL, N'10303', N'Norway'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10640, 86, 4, '20070821 00:00:00.000', '20070918 00:00:00.000', '20070828 00:00:00.000', 1, 23.55, N'Ship to 86-A', N'Adenauerallee 8901', N'Stuttgart', NULL, N'10347', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10641, 35, 4, '20070822 00:00:00.000', '20070919 00:00:00.000', '20070826 00:00:00.000', 2, 179.61, N'Destination JYDLM', N'Carrera1234 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10199', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10642, 73, 7, '20070822 00:00:00.000', '20070919 00:00:00.000', '20070905 00:00:00.000', 3, 41.89, N'Ship to 73-C', N'Vinbæltet 2345', N'Kobenhavn', NULL, N'10311', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10643, 1, 6, '20070825 00:00:00.000', '20070922 00:00:00.000', '20070902 00:00:00.000', 1, 29.46, N'Destination LOUIE', N'Obere Str. 6789', N'Berlin', NULL, N'10154', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10644, 88, 3, '20070825 00:00:00.000', '20070922 00:00:00.000', '20070901 00:00:00.000', 2, 0.14, N'Ship to 88-A', N'Rua do Mercado, 4567', N'Resende', N'SP', N'10353', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10645, 34, 4, '20070826 00:00:00.000', '20070923 00:00:00.000', '20070902 00:00:00.000', 1, 12.41, N'Destination DPCVR', N'Rua do Paço, 6789', N'Rio de Janeiro', N'RJ', N'10194', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10646, 37, 9, '20070827 00:00:00.000', '20071008 00:00:00.000', '20070903 00:00:00.000', 3, 142.33, N'Destination ATSOA', N'4567 Johnstown Road', N'Cork', N'Co. Cork', N'10202', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10647, 61, 4, '20070827 00:00:00.000', '20070910 00:00:00.000', '20070903 00:00:00.000', 2, 45.54, N'Ship to 61-B', N'Rua da Panificadora, 6789', N'Rio de Janeiro', N'RJ', N'10274', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10648, 67, 5, '20070828 00:00:00.000', '20071009 00:00:00.000', '20070909 00:00:00.000', 2, 14.25, N'Ship to 67-C', N'Av. Copacabana, 5678', N'Rio de Janeiro', N'RJ', N'10293', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10649, 50, 5, '20070828 00:00:00.000', '20070925 00:00:00.000', '20070829 00:00:00.000', 3, 6.20, N'Ship to 50-B', N'Rue Joseph-Bens 4567', N'Bruxelles', NULL, N'10242', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10650, 21, 5, '20070829 00:00:00.000', '20070926 00:00:00.000', '20070903 00:00:00.000', 3, 176.81, N'Destination SSYXZ', N'Rua Orós, 3456', N'Sao Paulo', N'SP', N'10161', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10651, 86, 8, '20070901 00:00:00.000', '20070929 00:00:00.000', '20070911 00:00:00.000', 2, 20.60, N'Ship to 86-A', N'Adenauerallee 8901', N'Stuttgart', NULL, N'10347', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10652, 31, 4, '20070901 00:00:00.000', '20070929 00:00:00.000', '20070908 00:00:00.000', 2, 7.14, N'Destination VNIAG', N'Av. Brasil, 9012', N'Campinas', N'SP', N'10187', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10653, 25, 1, '20070902 00:00:00.000', '20070930 00:00:00.000', '20070919 00:00:00.000', 1, 93.25, N'Destination QOCBL', N'Berliner Platz 1234', N'München', NULL, N'10169', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10654, 5, 5, '20070902 00:00:00.000', '20070930 00:00:00.000', '20070911 00:00:00.000', 1, 55.26, N'Ship to 5-C', N'Berguvsvägen 1234', N'Luleå', NULL, N'10269', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10655, 66, 1, '20070903 00:00:00.000', '20071001 00:00:00.000', '20070911 00:00:00.000', 2, 4.41, N'Ship to 66-B', N'Strada Provinciale 1234', N'Reggio Emilia', NULL, N'10289', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10656, 32, 6, '20070904 00:00:00.000', '20071002 00:00:00.000', '20070910 00:00:00.000', 1, 57.15, N'Destination AVQUS', N'2345 Baker Blvd.', N'Eugene', N'OR', N'10190', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10657, 71, 2, '20070904 00:00:00.000', '20071002 00:00:00.000', '20070915 00:00:00.000', 2, 352.69, N'Ship to 71-A', N'7890 Suffolk Ln.', N'Boise', N'ID', N'10305', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10658, 63, 4, '20070905 00:00:00.000', '20071003 00:00:00.000', '20070908 00:00:00.000', 1, 364.15, N'Ship to 63-C', N'Taucherstraße 3456', N'Cunewalde', NULL, N'10281', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10659, 62, 7, '20070905 00:00:00.000', '20071003 00:00:00.000', '20070910 00:00:00.000', 2, 105.81, N'Ship to 62-B', N'Alameda dos Canàrios, 9012', N'Sao Paulo', N'SP', N'10277', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10660, 36, 8, '20070908 00:00:00.000', '20071006 00:00:00.000', '20071015 00:00:00.000', 1, 111.29, N'Destination HOHCR', N'City Center Plaza 3456 Main St.', N'Elgin', N'OR', N'10201', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10661, 37, 7, '20070909 00:00:00.000', '20071007 00:00:00.000', '20070915 00:00:00.000', 3, 17.55, N'Destination ATSOA', N'4567 Johnstown Road', N'Cork', N'Co. Cork', N'10202', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10662, 48, 3, '20070909 00:00:00.000', '20071007 00:00:00.000', '20070918 00:00:00.000', 2, 1.28, N'Ship to 48-C', N'7890 Chiaroscuro Rd.', N'Portland', N'OR', N'10234', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10663, 9, 2, '20070910 00:00:00.000', '20070924 00:00:00.000', '20071003 00:00:00.000', 2, 113.15, N'Ship to 9-B', N'9012, rue des Bouchers', N'Marseille', NULL, N'10368', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10664, 28, 1, '20070910 00:00:00.000', '20071008 00:00:00.000', '20070919 00:00:00.000', 3, 1.27, N'Destination OTSWR', N'Jardim das rosas n. 9012', N'Lisboa', NULL, N'10177', N'Portugal'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10665, 48, 1, '20070911 00:00:00.000', '20071009 00:00:00.000', '20070917 00:00:00.000', 2, 26.31, N'Ship to 48-B', N'6789 Chiaroscuro Rd.', N'Portland', N'OR', N'10233', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10666, 68, 7, '20070912 00:00:00.000', '20071010 00:00:00.000', '20070922 00:00:00.000', 2, 232.42, N'Ship to 68-A', N'Starenweg 6789', N'Genève', NULL, N'10294', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10667, 20, 7, '20070912 00:00:00.000', '20071010 00:00:00.000', '20070919 00:00:00.000', 1, 78.09, N'Destination CUVPF', N'Kirchgasse 1234', N'Graz', NULL, N'10159', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10668, 86, 1, '20070915 00:00:00.000', '20071013 00:00:00.000', '20070923 00:00:00.000', 2, 47.22, N'Ship to 86-C', N'Adenauerallee 0123', N'Stuttgart', NULL, N'10349', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10669, 73, 2, '20070915 00:00:00.000', '20071013 00:00:00.000', '20070922 00:00:00.000', 1, 24.39, N'Ship to 73-A', N'Vinbæltet 1234', N'Kobenhavn', NULL, N'10310', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10670, 25, 4, '20070916 00:00:00.000', '20071014 00:00:00.000', '20070918 00:00:00.000', 1, 203.48, N'Destination QOCBL', N'Berliner Platz 1234', N'München', NULL, N'10169', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10671, 26, 1, '20070917 00:00:00.000', '20071015 00:00:00.000', '20070924 00:00:00.000', 1, 30.34, N'Destination OPXJT', N'4567, rue Royale', N'Nantes', NULL, N'10172', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10672, 5, 9, '20070917 00:00:00.000', '20071001 00:00:00.000', '20070926 00:00:00.000', 2, 95.75, N'Ship to 5-C', N'Berguvsvägen 1234', N'Luleå', NULL, N'10269', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10673, 90, 2, '20070918 00:00:00.000', '20071016 00:00:00.000', '20070919 00:00:00.000', 1, 22.76, N'Ship to 90-B', N'Keskuskatu 3456', N'Helsinki', NULL, N'10362', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10674, 38, 4, '20070918 00:00:00.000', '20071016 00:00:00.000', '20070930 00:00:00.000', 2, 0.90, N'Destination QVTLW', N'Garden House Crowther Way 7890', N'Cowes', N'Isle of Wight', N'10205', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10675, 25, 5, '20070919 00:00:00.000', '20071017 00:00:00.000', '20070923 00:00:00.000', 2, 31.85, N'Destination WEGWI', N'Berliner Platz 2345', N'München', NULL, N'10170', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10676, 80, 2, '20070922 00:00:00.000', '20071020 00:00:00.000', '20070929 00:00:00.000', 2, 2.01, N'Ship to 80-C', N'Avda. Azteca 5678', N'México D.F.', NULL, N'10334', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10677, 3, 1, '20070922 00:00:00.000', '20071020 00:00:00.000', '20070926 00:00:00.000', 3, 4.03, N'Destination LANNN', N'Mataderos 4567', N'México D.F.', NULL, N'10212', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10678, 71, 7, '20070923 00:00:00.000', '20071021 00:00:00.000', '20071016 00:00:00.000', 3, 388.98, N'Ship to 71-A', N'7890 Suffolk Ln.', N'Boise', N'ID', N'10305', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10679, 7, 8, '20070923 00:00:00.000', '20071021 00:00:00.000', '20070930 00:00:00.000', 3, 27.94, N'Ship to 7-A', N'0123, place Kléber', N'Strasbourg', NULL, N'10329', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10680, 55, 1, '20070924 00:00:00.000', '20071022 00:00:00.000', '20070926 00:00:00.000', 1, 26.61, N'Ship to 55-B', N'8901 Bering St.', N'Anchorage', N'AK', N'10256', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10681, 32, 3, '20070925 00:00:00.000', '20071023 00:00:00.000', '20070930 00:00:00.000', 3, 76.13, N'Destination AVQUS', N'2345 Baker Blvd.', N'Eugene', N'OR', N'10190', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10682, 3, 3, '20070925 00:00:00.000', '20071023 00:00:00.000', '20071001 00:00:00.000', 2, 36.13, N'Destination RTGIS', N'Mataderos 2345', N'México D.F.', NULL, N'10210', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10683, 18, 2, '20070926 00:00:00.000', '20071024 00:00:00.000', '20071001 00:00:00.000', 1, 4.40, N'Destination FVRGC', N'2345, rue des Cinquante Otages', N'Nantes', NULL, N'10150', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10684, 56, 3, '20070926 00:00:00.000', '20071024 00:00:00.000', '20070930 00:00:00.000', 1, 145.63, N'Ship to 56-B', N'Mehrheimerstr. 1234', N'Köln', NULL, N'10259', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10685, 31, 4, '20070929 00:00:00.000', '20071013 00:00:00.000', '20071003 00:00:00.000', 2, 33.75, N'Destination VNIAG', N'Av. Brasil, 9012', N'Campinas', N'SP', N'10187', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10686, 59, 2, '20070930 00:00:00.000', '20071028 00:00:00.000', '20071008 00:00:00.000', 1, 96.50, N'Ship to 59-B', N'Geislweg 7890', N'Salzburg', NULL, N'10265', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10687, 37, 9, '20070930 00:00:00.000', '20071028 00:00:00.000', '20071030 00:00:00.000', 2, 296.43, N'Destination KPVYJ', N'5678 Johnstown Road', N'Cork', N'Co. Cork', N'10203', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10688, 83, 4, '20071001 00:00:00.000', '20071015 00:00:00.000', '20071007 00:00:00.000', 2, 299.09, N'Ship to 83-A', N'Smagsloget 0123', N'Århus', NULL, N'10339', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10689, 5, 1, '20071001 00:00:00.000', '20071029 00:00:00.000', '20071007 00:00:00.000', 2, 13.42, N'Ship to 5-B', N'Berguvsvägen 0123', N'Luleå', NULL, N'10268', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10690, 34, 1, '20071002 00:00:00.000', '20071030 00:00:00.000', '20071003 00:00:00.000', 1, 15.80, N'Destination JPAIY', N'Rua do Paço, 8901', N'Rio de Janeiro', N'RJ', N'10196', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10691, 63, 2, '20071003 00:00:00.000', '20071114 00:00:00.000', '20071022 00:00:00.000', 2, 810.05, N'Ship to 63-B', N'Taucherstraße 2345', N'Cunewalde', NULL, N'10280', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10692, 1, 4, '20071003 00:00:00.000', '20071031 00:00:00.000', '20071013 00:00:00.000', 2, 61.02, N'Destination RSVRP', N'Obere Str. 8901', N'Berlin', NULL, N'10156', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10693, 89, 3, '20071006 00:00:00.000', '20071020 00:00:00.000', '20071010 00:00:00.000', 3, 139.34, N'Ship to 89-C', N'9012 - 12th Ave. S.', N'Seattle', N'WA', N'10358', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10694, 63, 8, '20071006 00:00:00.000', '20071103 00:00:00.000', '20071009 00:00:00.000', 3, 398.36, N'Ship to 63-A', N'Taucherstraße 1234', N'Cunewalde', NULL, N'10279', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10695, 90, 7, '20071007 00:00:00.000', '20071118 00:00:00.000', '20071014 00:00:00.000', 1, 16.72, N'Ship to 90-C', N'Keskuskatu 4567', N'Helsinki', NULL, N'10363', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10696, 89, 8, '20071008 00:00:00.000', '20071119 00:00:00.000', '20071014 00:00:00.000', 3, 102.55, N'Ship to 89-A', N'7890 - 12th Ave. S.', N'Seattle', N'WA', N'10356', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10697, 47, 3, '20071008 00:00:00.000', '20071105 00:00:00.000', '20071014 00:00:00.000', 1, 45.52, N'Ship to 47-B', N'Ave. 5 de Mayo Porlamar 4567', N'I. de Margarita', N'Nueva Esparta', N'10231', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10698, 20, 4, '20071009 00:00:00.000', '20071106 00:00:00.000', '20071017 00:00:00.000', 1, 272.47, N'Destination RVDMF', N'Kirchgasse 9012', N'Graz', NULL, N'10157', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10699, 52, 3, '20071009 00:00:00.000', '20071106 00:00:00.000', '20071013 00:00:00.000', 3, 0.58, N'Ship to 52-B', N'Heerstr. 0123', N'Leipzig', NULL, N'10248', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10700, 71, 3, '20071010 00:00:00.000', '20071107 00:00:00.000', '20071016 00:00:00.000', 1, 65.10, N'Ship to 71-C', N'9012 Suffolk Ln.', N'Boise', N'ID', N'10307', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10701, 37, 6, '20071013 00:00:00.000', '20071027 00:00:00.000', '20071015 00:00:00.000', 3, 220.31, N'Destination KPVYJ', N'5678 Johnstown Road', N'Cork', N'Co. Cork', N'10203', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10702, 1, 4, '20071013 00:00:00.000', '20071124 00:00:00.000', '20071021 00:00:00.000', 1, 23.94, N'Destination ZELZJ', N'Obere Str. 7890', N'Berlin', NULL, N'10155', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10703, 24, 6, '20071014 00:00:00.000', '20071111 00:00:00.000', '20071020 00:00:00.000', 2, 152.30, N'Destination KBSBN', N'Åkergatan 9012', N'Bräcke', NULL, N'10167', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10704, 62, 6, '20071014 00:00:00.000', '20071111 00:00:00.000', '20071107 00:00:00.000', 1, 4.78, N'Ship to 62-C', N'Alameda dos Canàrios, 0123', N'Sao Paulo', N'SP', N'10278', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10705, 35, 9, '20071015 00:00:00.000', '20071112 00:00:00.000', '20071118 00:00:00.000', 2, 3.52, N'Destination JYDLM', N'Carrera1234 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10199', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10706, 55, 8, '20071016 00:00:00.000', '20071113 00:00:00.000', '20071021 00:00:00.000', 3, 135.63, N'Ship to 55-C', N'9012 Bering St.', N'Anchorage', N'AK', N'10257', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10707, 4, 4, '20071016 00:00:00.000', '20071030 00:00:00.000', '20071023 00:00:00.000', 3, 21.74, N'Ship to 4-A', N'Brook Farm Stratford St. Mary 0123', N'Colchester', N'Essex', N'10238', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10708, 77, 6, '20071017 00:00:00.000', '20071128 00:00:00.000', '20071105 00:00:00.000', 2, 2.96, N'Ship to 77-C', N'3456 Jefferson Way Suite 2', N'Portland', N'OR', N'10322', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10709, 31, 1, '20071017 00:00:00.000', '20071114 00:00:00.000', '20071120 00:00:00.000', 3, 210.80, N'Destination GWPFK', N'Av. Brasil, 0123', N'Campinas', N'SP', N'10188', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10710, 27, 1, '20071020 00:00:00.000', '20071117 00:00:00.000', '20071023 00:00:00.000', 1, 4.98, N'Destination FFLQT', N'Via Monte Bianco 6789', N'Torino', NULL, N'10174', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10711, 71, 5, '20071021 00:00:00.000', '20071202 00:00:00.000', '20071029 00:00:00.000', 2, 52.41, N'Ship to 71-A', N'7890 Suffolk Ln.', N'Boise', N'ID', N'10305', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10712, 37, 3, '20071021 00:00:00.000', '20071118 00:00:00.000', '20071031 00:00:00.000', 1, 89.93, N'Destination KPVYJ', N'5678 Johnstown Road', N'Cork', N'Co. Cork', N'10203', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10713, 71, 1, '20071022 00:00:00.000', '20071119 00:00:00.000', '20071024 00:00:00.000', 1, 167.05, N'Ship to 71-C', N'9012 Suffolk Ln.', N'Boise', N'ID', N'10307', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10714, 71, 5, '20071022 00:00:00.000', '20071119 00:00:00.000', '20071027 00:00:00.000', 3, 24.49, N'Ship to 71-A', N'7890 Suffolk Ln.', N'Boise', N'ID', N'10305', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10715, 9, 3, '20071023 00:00:00.000', '20071106 00:00:00.000', '20071029 00:00:00.000', 1, 63.20, N'Ship to 9-B', N'9012, rue des Bouchers', N'Marseille', NULL, N'10368', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10716, 64, 4, '20071024 00:00:00.000', '20071121 00:00:00.000', '20071027 00:00:00.000', 2, 22.57, N'Ship to 64-B', N'Av. del Libertador 5678', N'Buenos Aires', NULL, N'10283', N'Argentina'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10717, 25, 1, '20071024 00:00:00.000', '20071121 00:00:00.000', '20071029 00:00:00.000', 2, 59.25, N'Destination QOCBL', N'Berliner Platz 1234', N'München', NULL, N'10169', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10718, 39, 1, '20071027 00:00:00.000', '20071124 00:00:00.000', '20071029 00:00:00.000', 3, 170.88, N'Destination DKMQA', N'Maubelstr. 0123', N'Brandenburg', NULL, N'10208', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10719, 45, 8, '20071027 00:00:00.000', '20071124 00:00:00.000', '20071105 00:00:00.000', 2, 51.44, N'Ship to 45-A', N'8901 Polk St. Suite 5', N'San Francisco', N'CA', N'10225', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10720, 61, 8, '20071028 00:00:00.000', '20071111 00:00:00.000', '20071105 00:00:00.000', 2, 9.53, N'Ship to 61-C', N'Rua da Panificadora, 7890', N'Rio de Janeiro', N'RJ', N'10275', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10721, 63, 5, '20071029 00:00:00.000', '20071126 00:00:00.000', '20071031 00:00:00.000', 3, 48.92, N'Ship to 63-A', N'Taucherstraße 1234', N'Cunewalde', NULL, N'10279', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10722, 71, 8, '20071029 00:00:00.000', '20071210 00:00:00.000', '20071104 00:00:00.000', 1, 74.58, N'Ship to 71-A', N'7890 Suffolk Ln.', N'Boise', N'ID', N'10305', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10723, 89, 3, '20071030 00:00:00.000', '20071127 00:00:00.000', '20071125 00:00:00.000', 1, 21.72, N'Ship to 89-C', N'9012 - 12th Ave. S.', N'Seattle', N'WA', N'10358', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10724, 51, 8, '20071030 00:00:00.000', '20071211 00:00:00.000', '20071105 00:00:00.000', 2, 57.75, N'Ship to 51-A', N'6789 rue St. Laurent', N'Montréal', N'Québec', N'10244', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10725, 21, 4, '20071031 00:00:00.000', '20071128 00:00:00.000', '20071105 00:00:00.000', 3, 10.83, N'Destination KKELL', N'Rua Orós, 4567', N'Sao Paulo', N'SP', N'10162', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10726, 19, 4, '20071103 00:00:00.000', '20071117 00:00:00.000', '20071205 00:00:00.000', 1, 16.56, N'Destination FRCGJ', N'5678 King George', N'London', NULL, N'10153', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10727, 66, 2, '20071103 00:00:00.000', '20071201 00:00:00.000', '20071205 00:00:00.000', 1, 89.90, N'Ship to 66-A', N'Strada Provinciale 0123', N'Reggio Emilia', NULL, N'10288', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10728, 62, 4, '20071104 00:00:00.000', '20071202 00:00:00.000', '20071111 00:00:00.000', 2, 58.33, N'Ship to 62-A', N'Alameda dos Canàrios, 8901', N'Sao Paulo', N'SP', N'10276', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10729, 47, 8, '20071104 00:00:00.000', '20071216 00:00:00.000', '20071114 00:00:00.000', 3, 141.06, N'Ship to 47-A', N'Ave. 5 de Mayo Porlamar 3456', N'I. de Margarita', N'Nueva Esparta', N'10230', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10730, 9, 5, '20071105 00:00:00.000', '20071203 00:00:00.000', '20071114 00:00:00.000', 1, 20.12, N'Ship to 9-A', N'8901, rue des Bouchers', N'Marseille', NULL, N'10367', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10731, 14, 7, '20071106 00:00:00.000', '20071204 00:00:00.000', '20071114 00:00:00.000', 1, 96.65, N'Destination YUJRD', N'Hauptstr. 1234', N'Bern', NULL, N'10139', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10732, 9, 3, '20071106 00:00:00.000', '20071204 00:00:00.000', '20071107 00:00:00.000', 1, 16.97, N'Ship to 9-A', N'8901, rue des Bouchers', N'Marseille', NULL, N'10367', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10733, 5, 1, '20071107 00:00:00.000', '20071205 00:00:00.000', '20071110 00:00:00.000', 3, 110.11, N'Ship to 5-A', N'Berguvsvägen 9012', N'Luleå', NULL, N'10267', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10734, 31, 2, '20071107 00:00:00.000', '20071205 00:00:00.000', '20071112 00:00:00.000', 3, 1.63, N'Destination VNIAG', N'Av. Brasil, 9012', N'Campinas', N'SP', N'10187', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10735, 45, 6, '20071110 00:00:00.000', '20071208 00:00:00.000', '20071121 00:00:00.000', 2, 45.97, N'Ship to 45-A', N'8901 Polk St. Suite 5', N'San Francisco', N'CA', N'10225', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10736, 37, 9, '20071111 00:00:00.000', '20071209 00:00:00.000', '20071121 00:00:00.000', 2, 44.10, N'Destination DGKOU', N'6789 Johnstown Road', N'Cork', N'Co. Cork', N'10204', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10737, 85, 2, '20071111 00:00:00.000', '20071209 00:00:00.000', '20071118 00:00:00.000', 2, 7.79, N'Ship to 85-C', N'7890 rue de l''Abbaye', N'Reims', NULL, N'10346', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10738, 74, 2, '20071112 00:00:00.000', '20071210 00:00:00.000', '20071118 00:00:00.000', 1, 2.91, N'Ship to 74-A', N'3456, rue Lauriston', N'Paris', NULL, N'10312', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10739, 85, 3, '20071112 00:00:00.000', '20071210 00:00:00.000', '20071117 00:00:00.000', 3, 11.08, N'Ship to 85-C', N'7890 rue de l''Abbaye', N'Reims', NULL, N'10346', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10740, 89, 4, '20071113 00:00:00.000', '20071211 00:00:00.000', '20071125 00:00:00.000', 2, 81.88, N'Ship to 89-B', N'8901 - 12th Ave. S.', N'Seattle', N'WA', N'10357', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10741, 4, 4, '20071114 00:00:00.000', '20071128 00:00:00.000', '20071118 00:00:00.000', 3, 10.96, N'Ship to 4-C', N'Brook Farm Stratford St. Mary 2345', N'Colchester', N'Essex', N'10240', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10742, 10, 3, '20071114 00:00:00.000', '20071212 00:00:00.000', '20071118 00:00:00.000', 3, 243.73, N'Destination LPHSI', N'3456 Tsawassen Blvd.', N'Tsawassen', N'BC', N'10131', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10743, 4, 1, '20071117 00:00:00.000', '20071215 00:00:00.000', '20071121 00:00:00.000', 2, 23.72, N'Ship to 4-C', N'Brook Farm Stratford St. Mary 2345', N'Colchester', N'Essex', N'10240', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10744, 83, 6, '20071117 00:00:00.000', '20071215 00:00:00.000', '20071124 00:00:00.000', 1, 69.19, N'Ship to 83-A', N'Smagsloget 0123', N'Århus', NULL, N'10339', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10745, 63, 9, '20071118 00:00:00.000', '20071216 00:00:00.000', '20071127 00:00:00.000', 1, 3.52, N'Ship to 63-C', N'Taucherstraße 3456', N'Cunewalde', NULL, N'10281', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10746, 14, 1, '20071119 00:00:00.000', '20071217 00:00:00.000', '20071121 00:00:00.000', 3, 31.43, N'Destination NRTZZ', N'Hauptstr. 0123', N'Bern', NULL, N'10138', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10747, 59, 6, '20071119 00:00:00.000', '20071217 00:00:00.000', '20071126 00:00:00.000', 1, 117.33, N'Ship to 59-B', N'Geislweg 7890', N'Salzburg', NULL, N'10265', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10748, 71, 3, '20071120 00:00:00.000', '20071218 00:00:00.000', '20071128 00:00:00.000', 1, 232.55, N'Ship to 71-B', N'8901 Suffolk Ln.', N'Boise', N'ID', N'10306', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10749, 38, 4, '20071120 00:00:00.000', '20071218 00:00:00.000', '20071219 00:00:00.000', 2, 61.53, N'Destination QVTLW', N'Garden House Crowther Way 7890', N'Cowes', N'Isle of Wight', N'10205', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10750, 87, 9, '20071121 00:00:00.000', '20071219 00:00:00.000', '20071124 00:00:00.000', 1, 79.30, N'Ship to 87-C', N'Torikatu 3456', N'Oulu', NULL, N'10352', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10751, 68, 3, '20071124 00:00:00.000', '20071222 00:00:00.000', '20071203 00:00:00.000', 3, 130.79, N'Ship to 68-A', N'Starenweg 6789', N'Genève', NULL, N'10294', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10752, 53, 2, '20071124 00:00:00.000', '20071222 00:00:00.000', '20071128 00:00:00.000', 3, 1.39, N'Ship to 53-C', N'South House 3456 Queensbridge', N'London', NULL, N'10251', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10753, 27, 3, '20071125 00:00:00.000', '20071223 00:00:00.000', '20071127 00:00:00.000', 1, 7.70, N'Destination DICGM', N'Via Monte Bianco 7890', N'Torino', NULL, N'10175', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10754, 49, 6, '20071125 00:00:00.000', '20071223 00:00:00.000', '20071127 00:00:00.000', 3, 2.38, N'Ship to 49-B', N'Via Ludovico il Moro 9012', N'Bergamo', NULL, N'10236', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10755, 9, 4, '20071126 00:00:00.000', '20071224 00:00:00.000', '20071128 00:00:00.000', 2, 16.71, N'Ship to 9-C', N'0123, rue des Bouchers', N'Marseille', NULL, N'10369', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10756, 75, 8, '20071127 00:00:00.000', '20071225 00:00:00.000', '20071202 00:00:00.000', 2, 73.21, N'Ship to 75-C', N'P.O. Box 7890', N'Lander', N'WY', N'10316', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10757, 71, 6, '20071127 00:00:00.000', '20071225 00:00:00.000', '20071215 00:00:00.000', 1, 8.19, N'Ship to 71-B', N'8901 Suffolk Ln.', N'Boise', N'ID', N'10306', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10758, 68, 3, '20071128 00:00:00.000', '20071226 00:00:00.000', '20071204 00:00:00.000', 3, 138.17, N'Ship to 68-C', N'Starenweg 8901', N'Genève', NULL, N'10296', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10759, 2, 3, '20071128 00:00:00.000', '20071226 00:00:00.000', '20071212 00:00:00.000', 3, 11.99, N'Destination QOTQA', N'Avda. de la Constitución 3456', N'México D.F.', NULL, N'10181', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10760, 50, 4, '20071201 00:00:00.000', '20071229 00:00:00.000', '20071210 00:00:00.000', 1, 155.64, N'Ship to 50-B', N'Rue Joseph-Bens 4567', N'Bruxelles', NULL, N'10242', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10761, 65, 5, '20071202 00:00:00.000', '20071230 00:00:00.000', '20071208 00:00:00.000', 2, 18.66, N'Ship to 65-B', N'8901 Milton Dr.', N'Albuquerque', N'NM', N'10286', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10762, 24, 3, '20071202 00:00:00.000', '20071230 00:00:00.000', '20071209 00:00:00.000', 1, 328.74, N'Destination YCMPK', N'Åkergatan 8901', N'Bräcke', NULL, N'10166', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10763, 23, 3, '20071203 00:00:00.000', '20071231 00:00:00.000', '20071208 00:00:00.000', 3, 37.35, N'Destination PXQRR', N'5678, chaussée de Tournai', N'Lille', NULL, N'10163', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10764, 20, 6, '20071203 00:00:00.000', '20071231 00:00:00.000', '20071208 00:00:00.000', 3, 145.45, N'Destination CUVPF', N'Kirchgasse 1234', N'Graz', NULL, N'10159', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10765, 63, 3, '20071204 00:00:00.000', '20080101 00:00:00.000', '20071209 00:00:00.000', 3, 42.74, N'Ship to 63-A', N'Taucherstraße 1234', N'Cunewalde', NULL, N'10279', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10766, 56, 4, '20071205 00:00:00.000', '20080102 00:00:00.000', '20071209 00:00:00.000', 1, 157.55, N'Ship to 56-C', N'Mehrheimerstr. 2345', N'Köln', NULL, N'10260', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10767, 76, 4, '20071205 00:00:00.000', '20080102 00:00:00.000', '20071215 00:00:00.000', 3, 1.59, N'Ship to 76-B', N'Boulevard Tirou, 9012', N'Charleroi', NULL, N'10318', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10768, 4, 3, '20071208 00:00:00.000', '20080105 00:00:00.000', '20071215 00:00:00.000', 2, 146.32, N'Ship to 4-B', N'Brook Farm Stratford St. Mary 1234', N'Colchester', N'Essex', N'10239', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10769, 83, 3, '20071208 00:00:00.000', '20080105 00:00:00.000', '20071212 00:00:00.000', 1, 65.06, N'Ship to 83-C', N'Smagsloget 2345', N'Århus', NULL, N'10341', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10770, 34, 8, '20071209 00:00:00.000', '20080106 00:00:00.000', '20071217 00:00:00.000', 3, 5.32, N'Destination JPAIY', N'Rua do Paço, 8901', N'Rio de Janeiro', N'RJ', N'10196', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10771, 20, 9, '20071210 00:00:00.000', '20080107 00:00:00.000', '20080102 00:00:00.000', 2, 11.19, N'Destination CUVPF', N'Kirchgasse 1234', N'Graz', NULL, N'10159', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10772, 44, 3, '20071210 00:00:00.000', '20080107 00:00:00.000', '20071219 00:00:00.000', 2, 91.28, N'Ship to 44-B', N'Magazinweg 5678', N'Frankfurt a.M.', NULL, N'10223', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10773, 20, 1, '20071211 00:00:00.000', '20080108 00:00:00.000', '20071216 00:00:00.000', 3, 96.43, N'Destination FFXKT', N'Kirchgasse 0123', N'Graz', NULL, N'10158', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10774, 24, 4, '20071211 00:00:00.000', '20071225 00:00:00.000', '20071212 00:00:00.000', 1, 48.20, N'Destination KBSBN', N'Åkergatan 9012', N'Bräcke', NULL, N'10167', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10775, 78, 7, '20071212 00:00:00.000', '20080109 00:00:00.000', '20071226 00:00:00.000', 1, 20.25, N'Ship to 78-A', N'4567 Grizzly Peak Rd.', N'Butte', N'MT', N'10323', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10776, 20, 1, '20071215 00:00:00.000', '20080112 00:00:00.000', '20071218 00:00:00.000', 3, 351.53, N'Destination RVDMF', N'Kirchgasse 9012', N'Graz', NULL, N'10157', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10777, 31, 7, '20071215 00:00:00.000', '20071229 00:00:00.000', '20080121 00:00:00.000', 2, 3.01, N'Destination GWPFK', N'Av. Brasil, 0123', N'Campinas', N'SP', N'10188', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10778, 5, 3, '20071216 00:00:00.000', '20080113 00:00:00.000', '20071224 00:00:00.000', 1, 6.79, N'Ship to 5-A', N'Berguvsvägen 9012', N'Luleå', NULL, N'10267', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10779, 52, 3, '20071216 00:00:00.000', '20080113 00:00:00.000', '20080114 00:00:00.000', 2, 58.13, N'Ship to 52-A', N'Heerstr. 9012', N'Leipzig', NULL, N'10247', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10780, 46, 2, '20071216 00:00:00.000', '20071230 00:00:00.000', '20071225 00:00:00.000', 1, 42.13, N'Ship to 46-C', N'Carrera 2345 con Ave. Bolívar #65-98 Llano Largo', N'Barquisimeto', N'Lara', N'10229', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10781, 87, 2, '20071217 00:00:00.000', '20080114 00:00:00.000', '20071219 00:00:00.000', 3, 73.16, N'Ship to 87-A', N'Torikatu 1234', N'Oulu', NULL, N'10350', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10782, 12, 9, '20071217 00:00:00.000', '20080114 00:00:00.000', '20071222 00:00:00.000', 3, 1.10, N'Destination CJDJB', N'Cerrito 8901', N'Buenos Aires', NULL, N'10136', N'Argentina'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10783, 34, 4, '20071218 00:00:00.000', '20080115 00:00:00.000', '20071219 00:00:00.000', 2, 124.98, N'Destination DPCVR', N'Rua do Paço, 6789', N'Rio de Janeiro', N'RJ', N'10194', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10784, 49, 4, '20071218 00:00:00.000', '20080115 00:00:00.000', '20071222 00:00:00.000', 3, 70.09, N'Ship to 49-A', N'Via Ludovico il Moro 8901', N'Bergamo', NULL, N'10235', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10785, 33, 1, '20071218 00:00:00.000', '20080115 00:00:00.000', '20071224 00:00:00.000', 3, 1.51, N'Destination FQJFJ', N'5ª Ave. Los Palos Grandes 4567', N'Caracas', N'DF', N'10192', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10786, 62, 8, '20071219 00:00:00.000', '20080116 00:00:00.000', '20071223 00:00:00.000', 1, 110.87, N'Ship to 62-B', N'Alameda dos Canàrios, 9012', N'Sao Paulo', N'SP', N'10277', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10787, 41, 2, '20071219 00:00:00.000', '20080102 00:00:00.000', '20071226 00:00:00.000', 1, 249.93, N'Destination DWJIO', N'9012 rue Alsace-Lorraine', N'Toulouse', NULL, N'10217', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10788, 63, 1, '20071222 00:00:00.000', '20080119 00:00:00.000', '20080119 00:00:00.000', 2, 42.70, N'Ship to 63-C', N'Taucherstraße 3456', N'Cunewalde', NULL, N'10281', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10789, 23, 1, '20071222 00:00:00.000', '20080119 00:00:00.000', '20071231 00:00:00.000', 2, 100.60, N'Destination PXQRR', N'5678, chaussée de Tournai', N'Lille', NULL, N'10163', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10790, 31, 6, '20071222 00:00:00.000', '20080119 00:00:00.000', '20071226 00:00:00.000', 1, 28.23, N'Destination XOIGC', N'Av. Brasil, 8901', N'Campinas', N'SP', N'10186', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10791, 25, 6, '20071223 00:00:00.000', '20080120 00:00:00.000', '20080101 00:00:00.000', 2, 16.85, N'Destination QOCBL', N'Berliner Platz 1234', N'München', NULL, N'10169', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10792, 91, 1, '20071223 00:00:00.000', '20080120 00:00:00.000', '20071231 00:00:00.000', 3, 23.79, N'Ship to 91-C', N'ul. Filtrowa 7890', N'Warszawa', NULL, N'10366', N'Poland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10793, 4, 3, '20071224 00:00:00.000', '20080121 00:00:00.000', '20080108 00:00:00.000', 3, 4.52, N'Ship to 4-B', N'Brook Farm Stratford St. Mary 1234', N'Colchester', N'Essex', N'10239', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10794, 61, 6, '20071224 00:00:00.000', '20080121 00:00:00.000', '20080102 00:00:00.000', 1, 21.49, N'Ship to 61-C', N'Rua da Panificadora, 7890', N'Rio de Janeiro', N'RJ', N'10275', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10795, 20, 8, '20071224 00:00:00.000', '20080121 00:00:00.000', '20080120 00:00:00.000', 2, 126.66, N'Destination FFXKT', N'Kirchgasse 0123', N'Graz', NULL, N'10158', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10796, 35, 3, '20071225 00:00:00.000', '20080122 00:00:00.000', '20080114 00:00:00.000', 1, 26.52, N'Destination UOUWK', N'Carrera 9012 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10197', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10797, 17, 7, '20071225 00:00:00.000', '20080122 00:00:00.000', '20080105 00:00:00.000', 2, 33.35, N'Destination AJTHX', N'Walserweg 9012', N'Aachen', NULL, N'10147', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10798, 38, 2, '20071226 00:00:00.000', '20080123 00:00:00.000', '20080105 00:00:00.000', 1, 2.33, N'Destination AXVHD', N'Garden House Crowther Way 9012', N'Cowes', N'Isle of Wight', N'10207', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10799, 39, 9, '20071226 00:00:00.000', '20080206 00:00:00.000', '20080105 00:00:00.000', 3, 30.76, N'Destination DKMQA', N'Maubelstr. 0123', N'Brandenburg', NULL, N'10208', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10800, 72, 1, '20071226 00:00:00.000', '20080123 00:00:00.000', '20080105 00:00:00.000', 3, 137.44, N'Ship to 72-C', N'1234 Wadhurst Rd.', N'London', NULL, N'10309', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10801, 8, 4, '20071229 00:00:00.000', '20080126 00:00:00.000', '20071231 00:00:00.000', 2, 97.09, N'Ship to 8-C', N'C/ Araquil, 1234', N'Madrid', NULL, N'10360', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10802, 73, 4, '20071229 00:00:00.000', '20080126 00:00:00.000', '20080102 00:00:00.000', 2, 257.26, N'Ship to 73-A', N'Vinbæltet 1234', N'Kobenhavn', NULL, N'10310', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10803, 88, 4, '20071230 00:00:00.000', '20080127 00:00:00.000', '20080106 00:00:00.000', 1, 55.23, N'Ship to 88-B', N'Rua do Mercado, 5678', N'Resende', N'SP', N'10354', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10804, 72, 6, '20071230 00:00:00.000', '20080127 00:00:00.000', '20080107 00:00:00.000', 2, 27.33, N'Ship to 72-C', N'1234 Wadhurst Rd.', N'London', NULL, N'10309', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10805, 77, 2, '20071230 00:00:00.000', '20080127 00:00:00.000', '20080109 00:00:00.000', 3, 237.34, N'Ship to 77-A', N'1234 Jefferson Way Suite 2', N'Portland', N'OR', N'10320', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10806, 84, 3, '20071231 00:00:00.000', '20080128 00:00:00.000', '20080105 00:00:00.000', 2, 22.11, N'Ship to 84-C', N'5678, rue du Commerce', N'Lyon', NULL, N'10344', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10807, 27, 4, '20071231 00:00:00.000', '20080128 00:00:00.000', '20080130 00:00:00.000', 1, 1.36, N'Destination XNLFB', N'Via Monte Bianco 5678', N'Torino', NULL, N'10173', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10808, 55, 2, '20080101 00:00:00.000', '20080129 00:00:00.000', '20080109 00:00:00.000', 3, 45.53, N'Ship to 55-B', N'8901 Bering St.', N'Anchorage', N'AK', N'10256', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10809, 88, 7, '20080101 00:00:00.000', '20080129 00:00:00.000', '20080107 00:00:00.000', 1, 4.87, N'Ship to 88-C', N'Rua do Mercado, 6789', N'Resende', N'SP', N'10355', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10810, 42, 2, '20080101 00:00:00.000', '20080129 00:00:00.000', '20080107 00:00:00.000', 3, 4.33, N'Ship to 42-A', N'1234 Elm St.', N'Vancouver', N'BC', N'10219', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10811, 47, 8, '20080102 00:00:00.000', '20080130 00:00:00.000', '20080108 00:00:00.000', 1, 31.22, N'Ship to 47-B', N'Ave. 5 de Mayo Porlamar 4567', N'I. de Margarita', N'Nueva Esparta', N'10231', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10812, 66, 5, '20080102 00:00:00.000', '20080130 00:00:00.000', '20080112 00:00:00.000', 1, 59.78, N'Ship to 66-B', N'Strada Provinciale 1234', N'Reggio Emilia', NULL, N'10289', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10813, 67, 1, '20080105 00:00:00.000', '20080202 00:00:00.000', '20080109 00:00:00.000', 1, 47.38, N'Ship to 67-C', N'Av. Copacabana, 5678', N'Rio de Janeiro', N'RJ', N'10293', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10814, 84, 3, '20080105 00:00:00.000', '20080202 00:00:00.000', '20080114 00:00:00.000', 3, 130.94, N'Ship to 84-B', N'4567, rue du Commerce', N'Lyon', NULL, N'10343', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10815, 71, 2, '20080105 00:00:00.000', '20080202 00:00:00.000', '20080114 00:00:00.000', 3, 14.62, N'Ship to 71-A', N'7890 Suffolk Ln.', N'Boise', N'ID', N'10305', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10816, 32, 4, '20080106 00:00:00.000', '20080203 00:00:00.000', '20080204 00:00:00.000', 2, 719.78, N'Destination AVQUS', N'2345 Baker Blvd.', N'Eugene', N'OR', N'10190', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10817, 39, 3, '20080106 00:00:00.000', '20080120 00:00:00.000', '20080113 00:00:00.000', 2, 306.07, N'Destination RMBHM', N'Maubelstr. 1234', N'Brandenburg', NULL, N'10209', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10818, 49, 7, '20080107 00:00:00.000', '20080204 00:00:00.000', '20080112 00:00:00.000', 3, 65.48, N'Ship to 49-B', N'Via Ludovico il Moro 9012', N'Bergamo', NULL, N'10236', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10819, 12, 2, '20080107 00:00:00.000', '20080204 00:00:00.000', '20080116 00:00:00.000', 3, 19.76, N'Destination QTHBC', N'Cerrito 6789', N'Buenos Aires', NULL, N'10134', N'Argentina'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10820, 65, 3, '20080107 00:00:00.000', '20080204 00:00:00.000', '20080113 00:00:00.000', 2, 37.52, N'Ship to 65-B', N'8901 Milton Dr.', N'Albuquerque', N'NM', N'10286', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10821, 75, 1, '20080108 00:00:00.000', '20080205 00:00:00.000', '20080115 00:00:00.000', 1, 36.68, N'Ship to 75-A', N'P.O. Box 5678', N'Lander', N'WY', N'10314', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10822, 82, 6, '20080108 00:00:00.000', '20080205 00:00:00.000', '20080116 00:00:00.000', 3, 7.00, N'Ship to 82-B', N'9012 DaVinci Blvd.', N'Kirkland', N'WA', N'10338', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10823, 46, 5, '20080109 00:00:00.000', '20080206 00:00:00.000', '20080113 00:00:00.000', 2, 163.97, N'Ship to 46-A', N'Carrera 0123 con Ave. Bolívar #65-98 Llano Largo', N'Barquisimeto', N'Lara', N'10227', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10824, 24, 8, '20080109 00:00:00.000', '20080206 00:00:00.000', '20080130 00:00:00.000', 1, 1.23, N'Destination NCKKO', N'Åkergatan 7890', N'Bräcke', NULL, N'10165', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10825, 17, 1, '20080109 00:00:00.000', '20080206 00:00:00.000', '20080114 00:00:00.000', 1, 79.25, N'Destination BJCXA', N'Walserweg 7890', N'Aachen', NULL, N'10145', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10826, 7, 6, '20080112 00:00:00.000', '20080209 00:00:00.000', '20080206 00:00:00.000', 1, 7.09, N'Ship to 7-C', N'2345, place Kléber', N'Strasbourg', NULL, N'10331', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10827, 9, 1, '20080112 00:00:00.000', '20080126 00:00:00.000', '20080206 00:00:00.000', 2, 63.54, N'Ship to 9-B', N'9012, rue des Bouchers', N'Marseille', NULL, N'10368', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10828, 64, 9, '20080113 00:00:00.000', '20080127 00:00:00.000', '20080204 00:00:00.000', 1, 90.85, N'Ship to 64-B', N'Av. del Libertador 5678', N'Buenos Aires', NULL, N'10283', N'Argentina'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10829, 38, 9, '20080113 00:00:00.000', '20080210 00:00:00.000', '20080123 00:00:00.000', 1, 154.72, N'Destination QVTLW', N'Garden House Crowther Way 7890', N'Cowes', N'Isle of Wight', N'10205', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10830, 81, 4, '20080113 00:00:00.000', '20080224 00:00:00.000', '20080121 00:00:00.000', 2, 81.83, N'Ship to 81-C', N'Av. Inês de Castro, 7890', N'Sao Paulo', N'SP', N'10336', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10831, 70, 3, '20080114 00:00:00.000', '20080211 00:00:00.000', '20080123 00:00:00.000', 2, 72.19, N'Ship to 70-B', N'Erling Skakkes gate 5678', N'Stavern', NULL, N'10303', N'Norway'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10832, 41, 2, '20080114 00:00:00.000', '20080211 00:00:00.000', '20080119 00:00:00.000', 2, 43.26, N'Ship to 41-C', N'0123 rue Alsace-Lorraine', N'Toulouse', NULL, N'10218', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10833, 56, 6, '20080115 00:00:00.000', '20080212 00:00:00.000', '20080123 00:00:00.000', 2, 71.49, N'Ship to 56-B', N'Mehrheimerstr. 1234', N'Köln', NULL, N'10259', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10834, 81, 1, '20080115 00:00:00.000', '20080212 00:00:00.000', '20080119 00:00:00.000', 3, 29.78, N'Ship to 81-A', N'Av. Inês de Castro, 6789', N'Sao Paulo', N'SP', N'10335', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10835, 1, 1, '20080115 00:00:00.000', '20080212 00:00:00.000', '20080121 00:00:00.000', 3, 69.53, N'Destination LOUIE', N'Obere Str. 6789', N'Berlin', NULL, N'10154', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10836, 20, 7, '20080116 00:00:00.000', '20080213 00:00:00.000', '20080121 00:00:00.000', 1, 411.88, N'Destination CUVPF', N'Kirchgasse 1234', N'Graz', NULL, N'10159', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10837, 5, 9, '20080116 00:00:00.000', '20080213 00:00:00.000', '20080123 00:00:00.000', 3, 13.32, N'Ship to 5-A', N'Berguvsvägen 9012', N'Luleå', NULL, N'10267', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10838, 47, 3, '20080119 00:00:00.000', '20080216 00:00:00.000', '20080123 00:00:00.000', 3, 59.28, N'Ship to 47-A', N'Ave. 5 de Mayo Porlamar 3456', N'I. de Margarita', N'Nueva Esparta', N'10230', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10839, 81, 3, '20080119 00:00:00.000', '20080216 00:00:00.000', '20080122 00:00:00.000', 3, 35.43, N'Ship to 81-C', N'Av. Inês de Castro, 7890', N'Sao Paulo', N'SP', N'10336', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10840, 47, 4, '20080119 00:00:00.000', '20080302 00:00:00.000', '20080216 00:00:00.000', 2, 2.71, N'Ship to 47-A', N'Ave. 5 de Mayo Porlamar 3456', N'I. de Margarita', N'Nueva Esparta', N'10230', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10841, 76, 5, '20080120 00:00:00.000', '20080217 00:00:00.000', '20080129 00:00:00.000', 2, 424.30, N'Ship to 76-B', N'Boulevard Tirou, 9012', N'Charleroi', NULL, N'10318', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10842, 80, 1, '20080120 00:00:00.000', '20080217 00:00:00.000', '20080129 00:00:00.000', 3, 54.42, N'Ship to 80-A', N'Avda. Azteca 3456', N'México D.F.', NULL, N'10332', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10843, 84, 4, '20080121 00:00:00.000', '20080218 00:00:00.000', '20080126 00:00:00.000', 2, 9.26, N'Ship to 84-C', N'5678, rue du Commerce', N'Lyon', NULL, N'10344', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10844, 59, 8, '20080121 00:00:00.000', '20080218 00:00:00.000', '20080126 00:00:00.000', 2, 25.22, N'Ship to 59-A', N'Geislweg 6789', N'Salzburg', NULL, N'10264', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10845, 63, 8, '20080121 00:00:00.000', '20080204 00:00:00.000', '20080130 00:00:00.000', 1, 212.98, N'Ship to 63-A', N'Taucherstraße 1234', N'Cunewalde', NULL, N'10279', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10846, 76, 2, '20080122 00:00:00.000', '20080305 00:00:00.000', '20080123 00:00:00.000', 3, 56.46, N'Ship to 76-C', N'Boulevard Tirou, 0123', N'Charleroi', NULL, N'10319', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10847, 71, 4, '20080122 00:00:00.000', '20080205 00:00:00.000', '20080210 00:00:00.000', 3, 487.57, N'Ship to 71-A', N'7890 Suffolk Ln.', N'Boise', N'ID', N'10305', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10848, 16, 7, '20080123 00:00:00.000', '20080220 00:00:00.000', '20080129 00:00:00.000', 2, 38.24, N'Destination QKQNB', N'Berkeley Gardens 5678 Brewery', N'London', NULL, N'10143', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10849, 39, 9, '20080123 00:00:00.000', '20080220 00:00:00.000', '20080130 00:00:00.000', 2, 0.56, N'Destination DKMQA', N'Maubelstr. 0123', N'Brandenburg', NULL, N'10208', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10850, 84, 1, '20080123 00:00:00.000', '20080306 00:00:00.000', '20080130 00:00:00.000', 1, 49.19, N'Ship to 84-C', N'5678, rue du Commerce', N'Lyon', NULL, N'10344', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10851, 67, 5, '20080126 00:00:00.000', '20080223 00:00:00.000', '20080202 00:00:00.000', 1, 160.55, N'Ship to 67-C', N'Av. Copacabana, 5678', N'Rio de Janeiro', N'RJ', N'10293', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10852, 65, 8, '20080126 00:00:00.000', '20080209 00:00:00.000', '20080130 00:00:00.000', 1, 174.05, N'Ship to 65-A', N'7890 Milton Dr.', N'Albuquerque', N'NM', N'10285', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10853, 6, 9, '20080127 00:00:00.000', '20080224 00:00:00.000', '20080203 00:00:00.000', 2, 53.83, N'Ship to 6-B', N'Forsterstr. 3456', N'Mannheim', NULL, N'10301', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10854, 20, 3, '20080127 00:00:00.000', '20080224 00:00:00.000', '20080205 00:00:00.000', 2, 100.22, N'Destination CUVPF', N'Kirchgasse 1234', N'Graz', NULL, N'10159', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10855, 55, 3, '20080127 00:00:00.000', '20080224 00:00:00.000', '20080204 00:00:00.000', 1, 170.97, N'Ship to 55-A', N'7890 Bering St.', N'Anchorage', N'AK', N'10255', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10856, 3, 3, '20080128 00:00:00.000', '20080225 00:00:00.000', '20080210 00:00:00.000', 2, 58.43, N'Destination FQFLS', N'Mataderos 3456', N'México D.F.', NULL, N'10211', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10857, 5, 8, '20080128 00:00:00.000', '20080225 00:00:00.000', '20080206 00:00:00.000', 2, 188.85, N'Ship to 5-B', N'Berguvsvägen 0123', N'Luleå', NULL, N'10268', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10858, 40, 2, '20080129 00:00:00.000', '20080226 00:00:00.000', '20080203 00:00:00.000', 1, 52.51, N'Destination POAEW', N'7890, avenue de l''Europe', N'Versailles', NULL, N'10215', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10859, 25, 1, '20080129 00:00:00.000', '20080226 00:00:00.000', '20080202 00:00:00.000', 2, 76.10, N'Destination QOCBL', N'Berliner Platz 1234', N'München', NULL, N'10169', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10860, 26, 3, '20080129 00:00:00.000', '20080226 00:00:00.000', '20080204 00:00:00.000', 3, 19.26, N'Destination XBVKN', N'3456, rue Royale', N'Nantes', NULL, N'10171', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10861, 89, 4, '20080130 00:00:00.000', '20080227 00:00:00.000', '20080217 00:00:00.000', 2, 14.93, N'Ship to 89-C', N'9012 - 12th Ave. S.', N'Seattle', N'WA', N'10358', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10862, 44, 8, '20080130 00:00:00.000', '20080313 00:00:00.000', '20080202 00:00:00.000', 2, 53.23, N'Ship to 44-C', N'Magazinweg 6789', N'Frankfurt a.M.', NULL, N'10224', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10863, 35, 4, '20080202 00:00:00.000', '20080302 00:00:00.000', '20080217 00:00:00.000', 2, 30.26, N'Destination UOUWK', N'Carrera 9012 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10197', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10864, 4, 4, '20080202 00:00:00.000', '20080302 00:00:00.000', '20080209 00:00:00.000', 2, 3.04, N'Ship to 4-C', N'Brook Farm Stratford St. Mary 2345', N'Colchester', N'Essex', N'10240', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10865, 63, 2, '20080202 00:00:00.000', '20080216 00:00:00.000', '20080212 00:00:00.000', 1, 348.14, N'Ship to 63-A', N'Taucherstraße 1234', N'Cunewalde', NULL, N'10279', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10866, 5, 5, '20080203 00:00:00.000', '20080303 00:00:00.000', '20080212 00:00:00.000', 1, 109.11, N'Ship to 5-B', N'Berguvsvägen 0123', N'Luleå', NULL, N'10268', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10867, 48, 6, '20080203 00:00:00.000', '20080317 00:00:00.000', '20080211 00:00:00.000', 1, 1.93, N'Ship to 48-B', N'6789 Chiaroscuro Rd.', N'Portland', N'OR', N'10233', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10868, 62, 7, '20080204 00:00:00.000', '20080304 00:00:00.000', '20080223 00:00:00.000', 2, 191.27, N'Ship to 62-C', N'Alameda dos Canàrios, 0123', N'Sao Paulo', N'SP', N'10278', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10869, 72, 5, '20080204 00:00:00.000', '20080304 00:00:00.000', '20080209 00:00:00.000', 1, 143.28, N'Ship to 72-A', N'0123 Wadhurst Rd.', N'London', NULL, N'10308', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10870, 91, 5, '20080204 00:00:00.000', '20080304 00:00:00.000', '20080213 00:00:00.000', 3, 12.04, N'Ship to 91-A', N'ul. Filtrowa 5678', N'Warszawa', NULL, N'10364', N'Poland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10871, 9, 9, '20080205 00:00:00.000', '20080305 00:00:00.000', '20080210 00:00:00.000', 2, 112.27, N'Ship to 9-B', N'9012, rue des Bouchers', N'Marseille', NULL, N'10368', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10872, 30, 5, '20080205 00:00:00.000', '20080305 00:00:00.000', '20080209 00:00:00.000', 2, 175.32, N'Destination GGQIR', N'C/ Romero, 6789', N'Sevilla', NULL, N'10184', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10873, 90, 4, '20080206 00:00:00.000', '20080306 00:00:00.000', '20080209 00:00:00.000', 1, 0.82, N'Ship to 90-B', N'Keskuskatu 3456', N'Helsinki', NULL, N'10362', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10874, 30, 5, '20080206 00:00:00.000', '20080306 00:00:00.000', '20080211 00:00:00.000', 2, 19.58, N'Destination IIYDD', N'C/ Romero, 5678', N'Sevilla', NULL, N'10183', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10875, 5, 4, '20080206 00:00:00.000', '20080306 00:00:00.000', '20080303 00:00:00.000', 2, 32.37, N'Ship to 5-A', N'Berguvsvägen 9012', N'Luleå', NULL, N'10267', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10876, 9, 7, '20080209 00:00:00.000', '20080309 00:00:00.000', '20080212 00:00:00.000', 3, 60.42, N'Ship to 9-A', N'8901, rue des Bouchers', N'Marseille', NULL, N'10367', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10877, 67, 1, '20080209 00:00:00.000', '20080309 00:00:00.000', '20080219 00:00:00.000', 1, 38.06, N'Ship to 67-B', N'Av. Copacabana, 4567', N'Rio de Janeiro', N'RJ', N'10292', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10878, 63, 4, '20080210 00:00:00.000', '20080310 00:00:00.000', '20080212 00:00:00.000', 1, 46.69, N'Ship to 63-B', N'Taucherstraße 2345', N'Cunewalde', NULL, N'10280', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10879, 90, 3, '20080210 00:00:00.000', '20080310 00:00:00.000', '20080212 00:00:00.000', 3, 8.50, N'Ship to 90-A', N'Keskuskatu 2345', N'Helsinki', NULL, N'10361', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10880, 24, 7, '20080210 00:00:00.000', '20080324 00:00:00.000', '20080218 00:00:00.000', 1, 88.01, N'Destination KBSBN', N'Åkergatan 9012', N'Bräcke', NULL, N'10167', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10881, 12, 4, '20080211 00:00:00.000', '20080311 00:00:00.000', '20080218 00:00:00.000', 1, 2.84, N'Destination IGLOB', N'Cerrito 7890', N'Buenos Aires', NULL, N'10135', N'Argentina'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10882, 71, 4, '20080211 00:00:00.000', '20080311 00:00:00.000', '20080220 00:00:00.000', 3, 23.10, N'Ship to 71-B', N'8901 Suffolk Ln.', N'Boise', N'ID', N'10306', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10883, 48, 8, '20080212 00:00:00.000', '20080312 00:00:00.000', '20080220 00:00:00.000', 3, 0.53, N'Ship to 48-C', N'7890 Chiaroscuro Rd.', N'Portland', N'OR', N'10234', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10884, 45, 4, '20080212 00:00:00.000', '20080312 00:00:00.000', '20080213 00:00:00.000', 2, 90.97, N'Ship to 45-C', N'9012 Polk St. Suite 5', N'San Francisco', N'CA', N'10226', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10885, 76, 6, '20080212 00:00:00.000', '20080312 00:00:00.000', '20080218 00:00:00.000', 3, 5.64, N'Ship to 76-B', N'Boulevard Tirou, 9012', N'Charleroi', NULL, N'10318', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10886, 34, 1, '20080213 00:00:00.000', '20080313 00:00:00.000', '20080302 00:00:00.000', 1, 4.99, N'Destination SCQXA', N'Rua do Paço, 7890', N'Rio de Janeiro', N'RJ', N'10195', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10887, 29, 8, '20080213 00:00:00.000', '20080313 00:00:00.000', '20080216 00:00:00.000', 3, 1.25, N'Destination VPNNG', N'Rambla de Cataluña, 0123', N'Barcelona', NULL, N'10178', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10888, 30, 1, '20080216 00:00:00.000', '20080316 00:00:00.000', '20080223 00:00:00.000', 2, 51.87, N'Destination IIYDD', N'C/ Romero, 5678', N'Sevilla', NULL, N'10183', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10889, 65, 9, '20080216 00:00:00.000', '20080316 00:00:00.000', '20080223 00:00:00.000', 3, 280.61, N'Ship to 65-C', N'9012 Milton Dr.', N'Albuquerque', N'NM', N'10287', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10890, 18, 7, '20080216 00:00:00.000', '20080316 00:00:00.000', '20080218 00:00:00.000', 1, 32.76, N'Destination JNSYI', N'1234, rue des Cinquante Otages', N'Nantes', NULL, N'10149', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10891, 44, 7, '20080217 00:00:00.000', '20080317 00:00:00.000', '20080219 00:00:00.000', 2, 20.37, N'Ship to 44-A', N'Magazinweg 4567', N'Frankfurt a.M.', NULL, N'10222', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10892, 50, 4, '20080217 00:00:00.000', '20080317 00:00:00.000', '20080219 00:00:00.000', 2, 120.27, N'Ship to 50-A', N'Rue Joseph-Bens 3456', N'Bruxelles', NULL, N'10241', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10893, 39, 9, '20080218 00:00:00.000', '20080318 00:00:00.000', '20080220 00:00:00.000', 2, 77.78, N'Destination RMBHM', N'Maubelstr. 1234', N'Brandenburg', NULL, N'10209', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10894, 71, 1, '20080218 00:00:00.000', '20080318 00:00:00.000', '20080220 00:00:00.000', 1, 116.13, N'Ship to 71-A', N'7890 Suffolk Ln.', N'Boise', N'ID', N'10305', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10895, 20, 3, '20080218 00:00:00.000', '20080318 00:00:00.000', '20080223 00:00:00.000', 1, 162.75, N'Destination CUVPF', N'Kirchgasse 1234', N'Graz', NULL, N'10159', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10896, 50, 7, '20080219 00:00:00.000', '20080319 00:00:00.000', '20080227 00:00:00.000', 3, 32.45, N'Ship to 50-A', N'Rue Joseph-Bens 3456', N'Bruxelles', NULL, N'10241', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10897, 37, 3, '20080219 00:00:00.000', '20080319 00:00:00.000', '20080225 00:00:00.000', 2, 603.54, N'Destination DGKOU', N'6789 Johnstown Road', N'Cork', N'Co. Cork', N'10204', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10898, 54, 4, '20080220 00:00:00.000', '20080320 00:00:00.000', '20080306 00:00:00.000', 2, 1.27, N'Ship to 54-B', N'Ing. Gustavo Moncada 5678 Piso 20-A', N'Buenos Aires', NULL, N'10253', N'Argentina'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10899, 46, 5, '20080220 00:00:00.000', '20080320 00:00:00.000', '20080226 00:00:00.000', 3, 1.21, N'Ship to 46-C', N'Carrera 2345 con Ave. Bolívar #65-98 Llano Largo', N'Barquisimeto', N'Lara', N'10229', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10900, 88, 1, '20080220 00:00:00.000', '20080320 00:00:00.000', '20080304 00:00:00.000', 2, 1.66, N'Ship to 88-A', N'Rua do Mercado, 4567', N'Resende', N'SP', N'10353', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10901, 35, 4, '20080223 00:00:00.000', '20080323 00:00:00.000', '20080226 00:00:00.000', 1, 62.09, N'Destination UOUWK', N'Carrera 9012 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10197', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10902, 24, 1, '20080223 00:00:00.000', '20080323 00:00:00.000', '20080303 00:00:00.000', 1, 44.15, N'Destination NCKKO', N'Åkergatan 7890', N'Bräcke', NULL, N'10165', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10903, 34, 3, '20080224 00:00:00.000', '20080324 00:00:00.000', '20080304 00:00:00.000', 3, 36.71, N'Destination DPCVR', N'Rua do Paço, 6789', N'Rio de Janeiro', N'RJ', N'10194', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10904, 89, 3, '20080224 00:00:00.000', '20080324 00:00:00.000', '20080227 00:00:00.000', 3, 162.95, N'Ship to 89-A', N'7890 - 12th Ave. S.', N'Seattle', N'WA', N'10356', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10905, 88, 9, '20080224 00:00:00.000', '20080324 00:00:00.000', '20080306 00:00:00.000', 2, 13.72, N'Ship to 88-A', N'Rua do Mercado, 4567', N'Resende', N'SP', N'10353', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10906, 91, 4, '20080225 00:00:00.000', '20080311 00:00:00.000', '20080303 00:00:00.000', 3, 26.29, N'Ship to 91-B', N'ul. Filtrowa 6789', N'Warszawa', NULL, N'10365', N'Poland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10907, 74, 6, '20080225 00:00:00.000', '20080325 00:00:00.000', '20080227 00:00:00.000', 3, 9.19, N'Ship to 74-B', N'4567, rue Lauriston', N'Paris', NULL, N'10313', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10908, 66, 4, '20080226 00:00:00.000', '20080326 00:00:00.000', '20080306 00:00:00.000', 2, 32.96, N'Ship to 66-B', N'Strada Provinciale 1234', N'Reggio Emilia', NULL, N'10289', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10909, 70, 1, '20080226 00:00:00.000', '20080326 00:00:00.000', '20080310 00:00:00.000', 2, 53.05, N'Ship to 70-C', N'Erling Skakkes gate 6789', N'Stavern', NULL, N'10304', N'Norway'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10910, 90, 1, '20080226 00:00:00.000', '20080326 00:00:00.000', '20080304 00:00:00.000', 3, 38.11, N'Ship to 90-A', N'Keskuskatu 2345', N'Helsinki', NULL, N'10361', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10911, 30, 3, '20080226 00:00:00.000', '20080326 00:00:00.000', '20080305 00:00:00.000', 1, 38.19, N'Destination IIYDD', N'C/ Romero, 5678', N'Sevilla', NULL, N'10183', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10912, 37, 2, '20080226 00:00:00.000', '20080326 00:00:00.000', '20080318 00:00:00.000', 2, 580.91, N'Destination DGKOU', N'6789 Johnstown Road', N'Cork', N'Co. Cork', N'10204', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10913, 62, 4, '20080226 00:00:00.000', '20080326 00:00:00.000', '20080304 00:00:00.000', 1, 33.05, N'Ship to 62-A', N'Alameda dos Canàrios, 8901', N'Sao Paulo', N'SP', N'10276', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10914, 62, 6, '20080227 00:00:00.000', '20080327 00:00:00.000', '20080302 00:00:00.000', 1, 21.19, N'Ship to 62-B', N'Alameda dos Canàrios, 9012', N'Sao Paulo', N'SP', N'10277', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10915, 80, 2, '20080227 00:00:00.000', '20080327 00:00:00.000', '20080302 00:00:00.000', 2, 3.51, N'Ship to 80-C', N'Avda. Azteca 5678', N'México D.F.', NULL, N'10334', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10916, 64, 1, '20080227 00:00:00.000', '20080327 00:00:00.000', '20080309 00:00:00.000', 2, 63.77, N'Ship to 64-C', N'Av. del Libertador 6789', N'Buenos Aires', NULL, N'10284', N'Argentina'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10917, 69, 4, '20080302 00:00:00.000', '20080330 00:00:00.000', '20080311 00:00:00.000', 2, 8.29, N'Ship to 69-C', N'Gran Vía, 1234', N'Madrid', NULL, N'10299', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10918, 10, 3, '20080302 00:00:00.000', '20080330 00:00:00.000', '20080311 00:00:00.000', 3, 48.83, N'Destination OLSSJ', N'2345 Tsawassen Blvd.', N'Tsawassen', N'BC', N'10130', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10919, 47, 2, '20080302 00:00:00.000', '20080330 00:00:00.000', '20080304 00:00:00.000', 2, 19.80, N'Ship to 47-B', N'Ave. 5 de Mayo Porlamar 4567', N'I. de Margarita', N'Nueva Esparta', N'10231', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10920, 4, 4, '20080303 00:00:00.000', '20080331 00:00:00.000', '20080309 00:00:00.000', 2, 29.61, N'Ship to 4-A', N'Brook Farm Stratford St. Mary 0123', N'Colchester', N'Essex', N'10238', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10921, 83, 1, '20080303 00:00:00.000', '20080414 00:00:00.000', '20080309 00:00:00.000', 1, 176.48, N'Ship to 83-A', N'Smagsloget 0123', N'Århus', NULL, N'10339', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10922, 34, 5, '20080303 00:00:00.000', '20080331 00:00:00.000', '20080305 00:00:00.000', 3, 62.74, N'Destination DPCVR', N'Rua do Paço, 6789', N'Rio de Janeiro', N'RJ', N'10194', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10923, 41, 7, '20080303 00:00:00.000', '20080414 00:00:00.000', '20080313 00:00:00.000', 3, 68.26, N'Destination OLJND', N'8901 rue Alsace-Lorraine', N'Toulouse', NULL, N'10216', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10924, 5, 3, '20080304 00:00:00.000', '20080401 00:00:00.000', '20080408 00:00:00.000', 2, 151.52, N'Ship to 5-A', N'Berguvsvägen 9012', N'Luleå', NULL, N'10267', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10925, 34, 3, '20080304 00:00:00.000', '20080401 00:00:00.000', '20080313 00:00:00.000', 1, 2.27, N'Destination JPAIY', N'Rua do Paço, 8901', N'Rio de Janeiro', N'RJ', N'10196', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10926, 2, 4, '20080304 00:00:00.000', '20080401 00:00:00.000', '20080311 00:00:00.000', 3, 39.92, N'Destination RAIGI', N'Avda. de la Constitución 4567', N'México D.F.', NULL, N'10182', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10927, 40, 4, '20080305 00:00:00.000', '20080402 00:00:00.000', '20080408 00:00:00.000', 1, 19.79, N'Destination WWJLO', N'6789, avenue de l''Europe', N'Versailles', NULL, N'10214', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10928, 29, 1, '20080305 00:00:00.000', '20080402 00:00:00.000', '20080318 00:00:00.000', 1, 1.36, N'Destination WOFLH', N'Rambla de Cataluña, 1234', N'Barcelona', NULL, N'10179', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10929, 25, 6, '20080305 00:00:00.000', '20080402 00:00:00.000', '20080312 00:00:00.000', 1, 33.93, N'Destination QOCBL', N'Berliner Platz 1234', N'München', NULL, N'10169', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10930, 76, 4, '20080306 00:00:00.000', '20080417 00:00:00.000', '20080318 00:00:00.000', 3, 15.55, N'Ship to 76-A', N'Boulevard Tirou, 8901', N'Charleroi', NULL, N'10317', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10931, 68, 4, '20080306 00:00:00.000', '20080320 00:00:00.000', '20080319 00:00:00.000', 2, 13.60, N'Ship to 68-B', N'Starenweg 7890', N'Genève', NULL, N'10295', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10932, 9, 8, '20080306 00:00:00.000', '20080403 00:00:00.000', '20080324 00:00:00.000', 1, 134.64, N'Ship to 9-B', N'9012, rue des Bouchers', N'Marseille', NULL, N'10368', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10933, 38, 6, '20080306 00:00:00.000', '20080403 00:00:00.000', '20080316 00:00:00.000', 3, 54.15, N'Destination QVTLW', N'Garden House Crowther Way 7890', N'Cowes', N'Isle of Wight', N'10205', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10934, 44, 3, '20080309 00:00:00.000', '20080406 00:00:00.000', '20080312 00:00:00.000', 3, 32.01, N'Ship to 44-C', N'Magazinweg 6789', N'Frankfurt a.M.', NULL, N'10224', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10935, 88, 4, '20080309 00:00:00.000', '20080406 00:00:00.000', '20080318 00:00:00.000', 3, 47.59, N'Ship to 88-A', N'Rua do Mercado, 4567', N'Resende', N'SP', N'10353', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10936, 32, 3, '20080309 00:00:00.000', '20080406 00:00:00.000', '20080318 00:00:00.000', 2, 33.68, N'Destination AVQUS', N'2345 Baker Blvd.', N'Eugene', N'OR', N'10190', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10937, 12, 7, '20080310 00:00:00.000', '20080324 00:00:00.000', '20080313 00:00:00.000', 3, 31.51, N'Destination QTHBC', N'Cerrito 6789', N'Buenos Aires', NULL, N'10134', N'Argentina'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10938, 63, 3, '20080310 00:00:00.000', '20080407 00:00:00.000', '20080316 00:00:00.000', 2, 31.89, N'Ship to 63-C', N'Taucherstraße 3456', N'Cunewalde', NULL, N'10281', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10939, 49, 2, '20080310 00:00:00.000', '20080407 00:00:00.000', '20080313 00:00:00.000', 2, 76.33, N'Ship to 49-A', N'Via Ludovico il Moro 8901', N'Bergamo', NULL, N'10235', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10940, 9, 8, '20080311 00:00:00.000', '20080408 00:00:00.000', '20080323 00:00:00.000', 3, 19.77, N'Ship to 9-C', N'0123, rue des Bouchers', N'Marseille', NULL, N'10369', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10941, 71, 7, '20080311 00:00:00.000', '20080408 00:00:00.000', '20080320 00:00:00.000', 2, 400.81, N'Ship to 71-A', N'7890 Suffolk Ln.', N'Boise', N'ID', N'10305', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10942, 66, 9, '20080311 00:00:00.000', '20080408 00:00:00.000', '20080318 00:00:00.000', 3, 17.95, N'Ship to 66-C', N'Strada Provinciale 2345', N'Reggio Emilia', NULL, N'10290', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10943, 11, 4, '20080311 00:00:00.000', '20080408 00:00:00.000', '20080319 00:00:00.000', 2, 2.17, N'Destination NZASL', N'Fauntleroy Circus 5678', N'London', NULL, N'10133', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10944, 10, 6, '20080312 00:00:00.000', '20080326 00:00:00.000', '20080313 00:00:00.000', 3, 52.92, N'Destination XJIBQ', N'1234 Tsawassen Blvd.', N'Tsawassen', N'BC', N'10129', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10945, 52, 4, '20080312 00:00:00.000', '20080409 00:00:00.000', '20080318 00:00:00.000', 1, 10.22, N'Ship to 52-B', N'Heerstr. 0123', N'Leipzig', NULL, N'10248', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10946, 83, 1, '20080312 00:00:00.000', '20080409 00:00:00.000', '20080319 00:00:00.000', 2, 27.20, N'Ship to 83-B', N'Smagsloget 1234', N'Århus', NULL, N'10340', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10947, 11, 3, '20080313 00:00:00.000', '20080410 00:00:00.000', '20080316 00:00:00.000', 2, 3.26, N'Destination NZASL', N'Fauntleroy Circus 5678', N'London', NULL, N'10133', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10948, 30, 3, '20080313 00:00:00.000', '20080410 00:00:00.000', '20080319 00:00:00.000', 3, 23.39, N'Destination GGQIR', N'C/ Romero, 6789', N'Sevilla', NULL, N'10184', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10949, 10, 2, '20080313 00:00:00.000', '20080410 00:00:00.000', '20080317 00:00:00.000', 3, 74.44, N'Destination OLSSJ', N'2345 Tsawassen Blvd.', N'Tsawassen', N'BC', N'10130', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10950, 49, 1, '20080316 00:00:00.000', '20080413 00:00:00.000', '20080323 00:00:00.000', 2, 2.50, N'Ship to 49-B', N'Via Ludovico il Moro 9012', N'Bergamo', NULL, N'10236', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10951, 68, 9, '20080316 00:00:00.000', '20080427 00:00:00.000', '20080407 00:00:00.000', 2, 30.85, N'Ship to 68-A', N'Starenweg 6789', N'Genève', NULL, N'10294', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10952, 1, 1, '20080316 00:00:00.000', '20080427 00:00:00.000', '20080324 00:00:00.000', 1, 40.42, N'Destination LOUIE', N'Obere Str. 6789', N'Berlin', NULL, N'10154', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10953, 4, 9, '20080316 00:00:00.000', '20080330 00:00:00.000', '20080325 00:00:00.000', 2, 23.72, N'Ship to 4-B', N'Brook Farm Stratford St. Mary 1234', N'Colchester', N'Essex', N'10239', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10954, 47, 5, '20080317 00:00:00.000', '20080428 00:00:00.000', '20080320 00:00:00.000', 1, 27.91, N'Ship to 47-B', N'Ave. 5 de Mayo Porlamar 4567', N'I. de Margarita', N'Nueva Esparta', N'10231', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10955, 24, 8, '20080317 00:00:00.000', '20080414 00:00:00.000', '20080320 00:00:00.000', 2, 3.26, N'Destination YCMPK', N'Åkergatan 8901', N'Bräcke', NULL, N'10166', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10956, 6, 6, '20080317 00:00:00.000', '20080428 00:00:00.000', '20080320 00:00:00.000', 2, 44.65, N'Ship to 6-B', N'Forsterstr. 3456', N'Mannheim', NULL, N'10301', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10957, 35, 8, '20080318 00:00:00.000', '20080415 00:00:00.000', '20080327 00:00:00.000', 3, 105.36, N'Destination UOUWK', N'Carrera 9012 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10197', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10958, 54, 7, '20080318 00:00:00.000', '20080415 00:00:00.000', '20080327 00:00:00.000', 2, 49.56, N'Ship to 54-C', N'Ing. Gustavo Moncada 6789 Piso 20-A', N'Buenos Aires', NULL, N'10254', N'Argentina'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10959, 31, 6, '20080318 00:00:00.000', '20080429 00:00:00.000', '20080323 00:00:00.000', 2, 4.98, N'Destination GWPFK', N'Av. Brasil, 0123', N'Campinas', N'SP', N'10188', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10960, 35, 3, '20080319 00:00:00.000', '20080402 00:00:00.000', '20080408 00:00:00.000', 1, 2.08, N'Destination SXYQX', N'Carrera 0123 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10198', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10961, 62, 8, '20080319 00:00:00.000', '20080416 00:00:00.000', '20080330 00:00:00.000', 1, 104.47, N'Ship to 62-A', N'Alameda dos Canàrios, 8901', N'Sao Paulo', N'SP', N'10276', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10962, 63, 8, '20080319 00:00:00.000', '20080416 00:00:00.000', '20080323 00:00:00.000', 2, 275.79, N'Ship to 63-B', N'Taucherstraße 2345', N'Cunewalde', NULL, N'10280', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10963, 28, 9, '20080319 00:00:00.000', '20080416 00:00:00.000', '20080326 00:00:00.000', 3, 2.70, N'Destination CIRQO', N'Jardim das rosas n. 8901', N'Lisboa', NULL, N'10176', N'Portugal'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10964, 74, 3, '20080320 00:00:00.000', '20080417 00:00:00.000', '20080324 00:00:00.000', 2, 87.38, N'Ship to 74-B', N'4567, rue Lauriston', N'Paris', NULL, N'10313', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10965, 55, 6, '20080320 00:00:00.000', '20080417 00:00:00.000', '20080330 00:00:00.000', 3, 144.38, N'Ship to 55-B', N'8901 Bering St.', N'Anchorage', N'AK', N'10256', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10966, 14, 4, '20080320 00:00:00.000', '20080417 00:00:00.000', '20080408 00:00:00.000', 1, 27.19, N'Destination NRTZZ', N'Hauptstr. 0123', N'Bern', NULL, N'10138', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10967, 79, 2, '20080323 00:00:00.000', '20080420 00:00:00.000', '20080402 00:00:00.000', 2, 62.22, N'Ship to 79-B', N'Luisenstr. 8901', N'Münster', NULL, N'10327', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10968, 20, 1, '20080323 00:00:00.000', '20080420 00:00:00.000', '20080401 00:00:00.000', 3, 74.60, N'Destination CUVPF', N'Kirchgasse 1234', N'Graz', NULL, N'10159', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10969, 15, 1, '20080323 00:00:00.000', '20080420 00:00:00.000', '20080330 00:00:00.000', 2, 0.21, N'Destination EVHYA', N'Av. dos Lusíadas, 3456', N'Sao Paulo', N'SP', N'10141', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10970, 8, 9, '20080324 00:00:00.000', '20080407 00:00:00.000', '20080424 00:00:00.000', 1, 16.16, N'Ship to 8-C', N'C/ Araquil, 1234', N'Madrid', NULL, N'10360', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10971, 26, 2, '20080324 00:00:00.000', '20080421 00:00:00.000', '20080402 00:00:00.000', 2, 121.82, N'Destination XBVKN', N'3456, rue Royale', N'Nantes', NULL, N'10171', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10972, 40, 4, '20080324 00:00:00.000', '20080421 00:00:00.000', '20080326 00:00:00.000', 2, 0.02, N'Destination MVTWX', N'5678, avenue de l''Europe', N'Versailles', NULL, N'10213', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10973, 40, 6, '20080324 00:00:00.000', '20080421 00:00:00.000', '20080327 00:00:00.000', 2, 15.17, N'Destination WWJLO', N'6789, avenue de l''Europe', N'Versailles', NULL, N'10214', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10974, 75, 3, '20080325 00:00:00.000', '20080408 00:00:00.000', '20080403 00:00:00.000', 3, 12.96, N'Ship to 75-B', N'P.O. Box 6789', N'Lander', N'WY', N'10315', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10975, 10, 1, '20080325 00:00:00.000', '20080422 00:00:00.000', '20080327 00:00:00.000', 3, 32.27, N'Destination OLSSJ', N'2345 Tsawassen Blvd.', N'Tsawassen', N'BC', N'10130', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10976, 35, 1, '20080325 00:00:00.000', '20080506 00:00:00.000', '20080403 00:00:00.000', 1, 37.97, N'Destination SXYQX', N'Carrera 0123 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10198', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10977, 24, 8, '20080326 00:00:00.000', '20080423 00:00:00.000', '20080410 00:00:00.000', 3, 208.50, N'Destination NCKKO', N'Åkergatan 7890', N'Bräcke', NULL, N'10165', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10978, 50, 9, '20080326 00:00:00.000', '20080423 00:00:00.000', '20080423 00:00:00.000', 2, 32.82, N'Ship to 50-A', N'Rue Joseph-Bens 3456', N'Bruxelles', NULL, N'10241', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10979, 20, 8, '20080326 00:00:00.000', '20080423 00:00:00.000', '20080331 00:00:00.000', 2, 353.07, N'Destination CUVPF', N'Kirchgasse 1234', N'Graz', NULL, N'10159', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10980, 24, 4, '20080327 00:00:00.000', '20080508 00:00:00.000', '20080417 00:00:00.000', 1, 1.26, N'Destination YCMPK', N'Åkergatan 8901', N'Bräcke', NULL, N'10166', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10981, 34, 1, '20080327 00:00:00.000', '20080424 00:00:00.000', '20080402 00:00:00.000', 2, 193.37, N'Destination JPAIY', N'Rua do Paço, 8901', N'Rio de Janeiro', N'RJ', N'10196', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10982, 10, 2, '20080327 00:00:00.000', '20080424 00:00:00.000', '20080408 00:00:00.000', 1, 14.01, N'Destination XJIBQ', N'1234 Tsawassen Blvd.', N'Tsawassen', N'BC', N'10129', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10983, 71, 2, '20080327 00:00:00.000', '20080424 00:00:00.000', '20080406 00:00:00.000', 2, 657.54, N'Ship to 71-B', N'8901 Suffolk Ln.', N'Boise', N'ID', N'10306', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10984, 71, 1, '20080330 00:00:00.000', '20080427 00:00:00.000', '20080403 00:00:00.000', 3, 211.22, N'Ship to 71-B', N'8901 Suffolk Ln.', N'Boise', N'ID', N'10306', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10985, 37, 2, '20080330 00:00:00.000', '20080427 00:00:00.000', '20080402 00:00:00.000', 1, 91.51, N'Destination ATSOA', N'4567 Johnstown Road', N'Cork', N'Co. Cork', N'10202', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10986, 54, 8, '20080330 00:00:00.000', '20080427 00:00:00.000', '20080421 00:00:00.000', 2, 217.86, N'Ship to 54-A', N'Ing. Gustavo Moncada 4567 Piso 20-A', N'Buenos Aires', NULL, N'10252', N'Argentina'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10987, 19, 8, '20080331 00:00:00.000', '20080428 00:00:00.000', '20080406 00:00:00.000', 1, 185.48, N'Destination FRCGJ', N'5678 King George', N'London', NULL, N'10153', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10988, 65, 3, '20080331 00:00:00.000', '20080428 00:00:00.000', '20080410 00:00:00.000', 2, 61.14, N'Ship to 65-A', N'7890 Milton Dr.', N'Albuquerque', N'NM', N'10285', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10989, 61, 2, '20080331 00:00:00.000', '20080428 00:00:00.000', '20080402 00:00:00.000', 1, 34.76, N'Ship to 61-A', N'Rua da Panificadora, 5678', N'Rio de Janeiro', N'RJ', N'10273', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10990, 20, 2, '20080401 00:00:00.000', '20080513 00:00:00.000', '20080407 00:00:00.000', 3, 117.61, N'Destination RVDMF', N'Kirchgasse 9012', N'Graz', NULL, N'10157', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10991, 63, 1, '20080401 00:00:00.000', '20080429 00:00:00.000', '20080407 00:00:00.000', 1, 38.51, N'Ship to 63-A', N'Taucherstraße 1234', N'Cunewalde', NULL, N'10279', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10992, 77, 1, '20080401 00:00:00.000', '20080429 00:00:00.000', '20080403 00:00:00.000', 3, 4.27, N'Ship to 77-C', N'3456 Jefferson Way Suite 2', N'Portland', N'OR', N'10322', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10993, 24, 7, '20080401 00:00:00.000', '20080429 00:00:00.000', '20080410 00:00:00.000', 3, 8.81, N'Destination NCKKO', N'Åkergatan 7890', N'Bräcke', NULL, N'10165', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10994, 83, 2, '20080402 00:00:00.000', '20080416 00:00:00.000', '20080409 00:00:00.000', 3, 65.53, N'Ship to 83-C', N'Smagsloget 2345', N'Århus', NULL, N'10341', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10995, 58, 1, '20080402 00:00:00.000', '20080430 00:00:00.000', '20080406 00:00:00.000', 3, 46.00, N'Ship to 58-B', N'Calle Dr. Jorge Cash 4567', N'México D.F.', NULL, N'10262', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10996, 63, 4, '20080402 00:00:00.000', '20080430 00:00:00.000', '20080410 00:00:00.000', 2, 1.12, N'Ship to 63-C', N'Taucherstraße 3456', N'Cunewalde', NULL, N'10281', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10997, 46, 8, '20080403 00:00:00.000', '20080515 00:00:00.000', '20080413 00:00:00.000', 2, 73.91, N'Ship to 46-A', N'Carrera 0123 con Ave. Bolívar #65-98 Llano Largo', N'Barquisimeto', N'Lara', N'10227', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10998, 91, 8, '20080403 00:00:00.000', '20080417 00:00:00.000', '20080417 00:00:00.000', 2, 20.31, N'Ship to 91-A', N'ul. Filtrowa 5678', N'Warszawa', NULL, N'10364', N'Poland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(10999, 56, 6, '20080403 00:00:00.000', '20080501 00:00:00.000', '20080410 00:00:00.000', 2, 96.35, N'Ship to 56-B', N'Mehrheimerstr. 1234', N'Köln', NULL, N'10259', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11000, 65, 2, '20080406 00:00:00.000', '20080504 00:00:00.000', '20080414 00:00:00.000', 3, 55.12, N'Ship to 65-A', N'7890 Milton Dr.', N'Albuquerque', N'NM', N'10285', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11001, 24, 2, '20080406 00:00:00.000', '20080504 00:00:00.000', '20080414 00:00:00.000', 2, 197.30, N'Destination YCMPK', N'Åkergatan 8901', N'Bräcke', NULL, N'10166', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11002, 71, 4, '20080406 00:00:00.000', '20080504 00:00:00.000', '20080416 00:00:00.000', 1, 141.16, N'Ship to 71-A', N'7890 Suffolk Ln.', N'Boise', N'ID', N'10305', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11003, 78, 3, '20080406 00:00:00.000', '20080504 00:00:00.000', '20080408 00:00:00.000', 3, 14.91, N'Ship to 78-B', N'5678 Grizzly Peak Rd.', N'Butte', N'MT', N'10324', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11004, 50, 3, '20080407 00:00:00.000', '20080505 00:00:00.000', '20080420 00:00:00.000', 1, 44.84, N'Ship to 50-C', N'Rue Joseph-Bens 5678', N'Bruxelles', NULL, N'10243', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11005, 90, 2, '20080407 00:00:00.000', '20080505 00:00:00.000', '20080410 00:00:00.000', 1, 0.75, N'Ship to 90-A', N'Keskuskatu 2345', N'Helsinki', NULL, N'10361', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11006, 32, 3, '20080407 00:00:00.000', '20080505 00:00:00.000', '20080415 00:00:00.000', 2, 25.19, N'Destination LLUXZ', N'1234 Baker Blvd.', N'Eugene', N'OR', N'10189', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11007, 60, 8, '20080408 00:00:00.000', '20080506 00:00:00.000', '20080413 00:00:00.000', 2, 202.24, N'Ship to 60-C', N'Estrada da saúde n. 4567', N'Lisboa', NULL, N'10272', N'Portugal'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11008, 20, 7, '20080408 00:00:00.000', '20080506 00:00:00.000', NULL, 3, 79.46, N'Destination CUVPF', N'Kirchgasse 1234', N'Graz', NULL, N'10159', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11009, 30, 2, '20080408 00:00:00.000', '20080506 00:00:00.000', '20080410 00:00:00.000', 1, 59.11, N'Destination WVLDH', N'C/ Romero, 7890', N'Sevilla', NULL, N'10185', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11010, 66, 2, '20080409 00:00:00.000', '20080507 00:00:00.000', '20080421 00:00:00.000', 2, 28.71, N'Ship to 66-A', N'Strada Provinciale 0123', N'Reggio Emilia', NULL, N'10288', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11011, 1, 3, '20080409 00:00:00.000', '20080507 00:00:00.000', '20080413 00:00:00.000', 1, 1.21, N'Destination LOUIE', N'Obere Str. 6789', N'Berlin', NULL, N'10154', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11012, 25, 1, '20080409 00:00:00.000', '20080423 00:00:00.000', '20080417 00:00:00.000', 3, 242.95, N'Destination WEGWI', N'Berliner Platz 2345', N'München', NULL, N'10170', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11013, 69, 2, '20080409 00:00:00.000', '20080507 00:00:00.000', '20080410 00:00:00.000', 1, 32.99, N'Ship to 69-A', N'Gran Vía, 9012', N'Madrid', NULL, N'10297', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11014, 47, 2, '20080410 00:00:00.000', '20080508 00:00:00.000', '20080415 00:00:00.000', 3, 23.60, N'Ship to 47-A', N'Ave. 5 de Mayo Porlamar 3456', N'I. de Margarita', N'Nueva Esparta', N'10230', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11015, 70, 2, '20080410 00:00:00.000', '20080424 00:00:00.000', '20080420 00:00:00.000', 2, 4.62, N'Ship to 70-C', N'Erling Skakkes gate 6789', N'Stavern', NULL, N'10304', N'Norway'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11016, 4, 9, '20080410 00:00:00.000', '20080508 00:00:00.000', '20080413 00:00:00.000', 2, 33.80, N'Ship to 4-A', N'Brook Farm Stratford St. Mary 0123', N'Colchester', N'Essex', N'10238', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11017, 20, 9, '20080413 00:00:00.000', '20080511 00:00:00.000', '20080420 00:00:00.000', 2, 754.26, N'Destination CUVPF', N'Kirchgasse 1234', N'Graz', NULL, N'10159', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11018, 48, 4, '20080413 00:00:00.000', '20080511 00:00:00.000', '20080416 00:00:00.000', 2, 11.65, N'Ship to 48-B', N'6789 Chiaroscuro Rd.', N'Portland', N'OR', N'10233', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11019, 64, 6, '20080413 00:00:00.000', '20080511 00:00:00.000', NULL, 3, 3.17, N'Ship to 64-B', N'Av. del Libertador 5678', N'Buenos Aires', NULL, N'10283', N'Argentina'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11020, 56, 2, '20080414 00:00:00.000', '20080512 00:00:00.000', '20080416 00:00:00.000', 2, 43.30, N'Ship to 56-B', N'Mehrheimerstr. 1234', N'Köln', NULL, N'10259', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11021, 63, 3, '20080414 00:00:00.000', '20080512 00:00:00.000', '20080421 00:00:00.000', 1, 297.18, N'Ship to 63-B', N'Taucherstraße 2345', N'Cunewalde', NULL, N'10280', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11022, 34, 9, '20080414 00:00:00.000', '20080512 00:00:00.000', '20080504 00:00:00.000', 2, 6.27, N'Destination SCQXA', N'Rua do Paço, 7890', N'Rio de Janeiro', N'RJ', N'10195', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11023, 11, 1, '20080414 00:00:00.000', '20080428 00:00:00.000', '20080424 00:00:00.000', 2, 123.83, N'Destination NZASL', N'Fauntleroy Circus 5678', N'London', NULL, N'10133', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11024, 19, 4, '20080415 00:00:00.000', '20080513 00:00:00.000', '20080420 00:00:00.000', 1, 74.36, N'Destination BBMRT', N'4567 King George', N'London', NULL, N'10152', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11025, 87, 6, '20080415 00:00:00.000', '20080513 00:00:00.000', '20080424 00:00:00.000', 3, 29.17, N'Ship to 87-C', N'Torikatu 3456', N'Oulu', NULL, N'10352', N'Finland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11026, 27, 4, '20080415 00:00:00.000', '20080513 00:00:00.000', '20080428 00:00:00.000', 1, 47.09, N'Destination DICGM', N'Via Monte Bianco 7890', N'Torino', NULL, N'10175', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11027, 10, 1, '20080416 00:00:00.000', '20080514 00:00:00.000', '20080420 00:00:00.000', 1, 52.52, N'Destination XJIBQ', N'1234 Tsawassen Blvd.', N'Tsawassen', N'BC', N'10129', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11028, 39, 2, '20080416 00:00:00.000', '20080514 00:00:00.000', '20080422 00:00:00.000', 1, 29.59, N'Destination DKMQA', N'Maubelstr. 0123', N'Brandenburg', NULL, N'10208', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11029, 14, 4, '20080416 00:00:00.000', '20080514 00:00:00.000', '20080427 00:00:00.000', 1, 47.84, N'Destination YUJRD', N'Hauptstr. 1234', N'Bern', NULL, N'10139', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11030, 71, 7, '20080417 00:00:00.000', '20080515 00:00:00.000', '20080427 00:00:00.000', 2, 830.75, N'Ship to 71-C', N'9012 Suffolk Ln.', N'Boise', N'ID', N'10307', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11031, 71, 6, '20080417 00:00:00.000', '20080515 00:00:00.000', '20080424 00:00:00.000', 2, 227.22, N'Ship to 71-C', N'9012 Suffolk Ln.', N'Boise', N'ID', N'10307', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11032, 89, 2, '20080417 00:00:00.000', '20080515 00:00:00.000', '20080423 00:00:00.000', 3, 606.19, N'Ship to 89-B', N'8901 - 12th Ave. S.', N'Seattle', N'WA', N'10357', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11033, 68, 7, '20080417 00:00:00.000', '20080515 00:00:00.000', '20080423 00:00:00.000', 3, 84.74, N'Ship to 68-A', N'Starenweg 6789', N'Genève', NULL, N'10294', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11034, 55, 8, '20080420 00:00:00.000', '20080601 00:00:00.000', '20080427 00:00:00.000', 1, 40.32, N'Ship to 55-B', N'8901 Bering St.', N'Anchorage', N'AK', N'10256', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11035, 76, 2, '20080420 00:00:00.000', '20080518 00:00:00.000', '20080424 00:00:00.000', 2, 0.17, N'Ship to 76-B', N'Boulevard Tirou, 9012', N'Charleroi', NULL, N'10318', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11036, 17, 8, '20080420 00:00:00.000', '20080518 00:00:00.000', '20080422 00:00:00.000', 3, 149.47, N'Destination YPUYI', N'Walserweg 8901', N'Aachen', NULL, N'10146', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11037, 30, 7, '20080421 00:00:00.000', '20080519 00:00:00.000', '20080427 00:00:00.000', 1, 3.20, N'Destination GGQIR', N'C/ Romero, 6789', N'Sevilla', NULL, N'10184', N'Spain'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11038, 76, 1, '20080421 00:00:00.000', '20080519 00:00:00.000', '20080430 00:00:00.000', 2, 29.59, N'Ship to 76-A', N'Boulevard Tirou, 8901', N'Charleroi', NULL, N'10317', N'Belgium'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11039, 47, 1, '20080421 00:00:00.000', '20080519 00:00:00.000', NULL, 2, 65.00, N'Ship to 47-C', N'Ave. 5 de Mayo Porlamar 5678', N'I. de Margarita', N'Nueva Esparta', N'10232', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11040, 32, 4, '20080422 00:00:00.000', '20080520 00:00:00.000', NULL, 3, 18.84, N'Destination VYOBK', N'3456 Baker Blvd.', N'Eugene', N'OR', N'10191', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11041, 14, 3, '20080422 00:00:00.000', '20080520 00:00:00.000', '20080428 00:00:00.000', 2, 48.22, N'Destination YUJRD', N'Hauptstr. 1234', N'Bern', NULL, N'10139', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11042, 15, 2, '20080422 00:00:00.000', '20080506 00:00:00.000', '20080501 00:00:00.000', 1, 29.99, N'Destination EVHYA', N'Av. dos Lusíadas, 3456', N'Sao Paulo', N'SP', N'10141', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11043, 74, 5, '20080422 00:00:00.000', '20080520 00:00:00.000', '20080429 00:00:00.000', 2, 8.80, N'Ship to 74-B', N'4567, rue Lauriston', N'Paris', NULL, N'10313', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11044, 91, 4, '20080423 00:00:00.000', '20080521 00:00:00.000', '20080501 00:00:00.000', 1, 8.72, N'Ship to 91-B', N'ul. Filtrowa 6789', N'Warszawa', NULL, N'10365', N'Poland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11045, 10, 6, '20080423 00:00:00.000', '20080521 00:00:00.000', NULL, 2, 70.58, N'Destination LPHSI', N'3456 Tsawassen Blvd.', N'Tsawassen', N'BC', N'10131', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11046, 86, 8, '20080423 00:00:00.000', '20080521 00:00:00.000', '20080424 00:00:00.000', 2, 71.64, N'Ship to 86-C', N'Adenauerallee 0123', N'Stuttgart', NULL, N'10349', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11047, 19, 7, '20080424 00:00:00.000', '20080522 00:00:00.000', '20080501 00:00:00.000', 3, 46.62, N'Destination FRCGJ', N'5678 King George', N'London', NULL, N'10153', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11048, 10, 7, '20080424 00:00:00.000', '20080522 00:00:00.000', '20080430 00:00:00.000', 3, 24.12, N'Destination XJIBQ', N'1234 Tsawassen Blvd.', N'Tsawassen', N'BC', N'10129', N'Canada'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11049, 31, 3, '20080424 00:00:00.000', '20080522 00:00:00.000', '20080504 00:00:00.000', 1, 8.34, N'Destination XOIGC', N'Av. Brasil, 8901', N'Campinas', N'SP', N'10186', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11050, 24, 8, '20080427 00:00:00.000', '20080525 00:00:00.000', '20080505 00:00:00.000', 2, 59.41, N'Destination YCMPK', N'Åkergatan 8901', N'Bräcke', NULL, N'10166', N'Sweden'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11051, 41, 7, '20080427 00:00:00.000', '20080525 00:00:00.000', NULL, 3, 2.79, N'Destination OLJND', N'8901 rue Alsace-Lorraine', N'Toulouse', NULL, N'10216', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11052, 34, 3, '20080427 00:00:00.000', '20080525 00:00:00.000', '20080501 00:00:00.000', 1, 67.26, N'Destination DPCVR', N'Rua do Paço, 6789', N'Rio de Janeiro', N'RJ', N'10194', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11053, 59, 2, '20080427 00:00:00.000', '20080525 00:00:00.000', '20080429 00:00:00.000', 2, 53.05, N'Ship to 59-A', N'Geislweg 6789', N'Salzburg', NULL, N'10264', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11054, 12, 8, '20080428 00:00:00.000', '20080526 00:00:00.000', NULL, 1, 0.33, N'Destination QTHBC', N'Cerrito 6789', N'Buenos Aires', NULL, N'10134', N'Argentina'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11055, 35, 7, '20080428 00:00:00.000', '20080526 00:00:00.000', '20080505 00:00:00.000', 2, 120.92, N'Destination JYDLM', N'Carrera1234 con Ave. Carlos Soublette #8-35', N'San Cristóbal', N'Táchira', N'10199', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11056, 19, 8, '20080428 00:00:00.000', '20080512 00:00:00.000', '20080501 00:00:00.000', 2, 278.96, N'Destination QTKCU', N'3456 King George', N'London', NULL, N'10151', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11057, 53, 3, '20080429 00:00:00.000', '20080527 00:00:00.000', '20080501 00:00:00.000', 3, 4.13, N'Ship to 53-C', N'South House 3456 Queensbridge', N'London', NULL, N'10251', N'UK'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11058, 6, 9, '20080429 00:00:00.000', '20080527 00:00:00.000', NULL, 3, 31.14, N'Ship to 6-A', N'Forsterstr. 2345', N'Mannheim', NULL, N'10300', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11059, 67, 2, '20080429 00:00:00.000', '20080610 00:00:00.000', NULL, 2, 85.80, N'Ship to 67-A', N'Av. Copacabana, 3456', N'Rio de Janeiro', N'RJ', N'10291', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11060, 27, 2, '20080430 00:00:00.000', '20080528 00:00:00.000', '20080504 00:00:00.000', 2, 10.98, N'Destination DICGM', N'Via Monte Bianco 7890', N'Torino', NULL, N'10175', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11061, 32, 4, '20080430 00:00:00.000', '20080611 00:00:00.000', NULL, 3, 14.01, N'Destination VYOBK', N'3456 Baker Blvd.', N'Eugene', N'OR', N'10191', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11062, 66, 4, '20080430 00:00:00.000', '20080528 00:00:00.000', NULL, 2, 29.93, N'Ship to 66-B', N'Strada Provinciale 1234', N'Reggio Emilia', NULL, N'10289', N'Italy'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11063, 37, 3, '20080430 00:00:00.000', '20080528 00:00:00.000', '20080506 00:00:00.000', 2, 81.73, N'Destination KPVYJ', N'5678 Johnstown Road', N'Cork', N'Co. Cork', N'10203', N'Ireland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11064, 71, 1, '20080501 00:00:00.000', '20080529 00:00:00.000', '20080504 00:00:00.000', 1, 30.09, N'Ship to 71-C', N'9012 Suffolk Ln.', N'Boise', N'ID', N'10307', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11065, 46, 8, '20080501 00:00:00.000', '20080529 00:00:00.000', NULL, 1, 12.91, N'Ship to 46-C', N'Carrera 2345 con Ave. Bolívar #65-98 Llano Largo', N'Barquisimeto', N'Lara', N'10229', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11066, 89, 7, '20080501 00:00:00.000', '20080529 00:00:00.000', '20080504 00:00:00.000', 2, 44.72, N'Ship to 89-A', N'7890 - 12th Ave. S.', N'Seattle', N'WA', N'10356', N'USA'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11067, 17, 1, '20080504 00:00:00.000', '20080518 00:00:00.000', '20080506 00:00:00.000', 2, 7.98, N'Destination BJCXA', N'Walserweg 7890', N'Aachen', NULL, N'10145', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11068, 62, 8, '20080504 00:00:00.000', '20080601 00:00:00.000', NULL, 2, 81.75, N'Ship to 62-A', N'Alameda dos Canàrios, 8901', N'Sao Paulo', N'SP', N'10276', N'Brazil'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11069, 80, 1, '20080504 00:00:00.000', '20080601 00:00:00.000', '20080506 00:00:00.000', 2, 15.67, N'Ship to 80-B', N'Avda. Azteca 4567', N'México D.F.', NULL, N'10333', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11070, 44, 2, '20080505 00:00:00.000', '20080602 00:00:00.000', NULL, 1, 136.00, N'Ship to 44-A', N'Magazinweg 4567', N'Frankfurt a.M.', NULL, N'10222', N'Germany'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11071, 46, 1, '20080505 00:00:00.000', '20080602 00:00:00.000', NULL, 1, 0.93, N'Ship to 46-B', N'Carrera 1234 con Ave. Bolívar #65-98 Llano Largo', N'Barquisimeto', N'Lara', N'10228', N'Venezuela'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11072, 20, 4, '20080505 00:00:00.000', '20080602 00:00:00.000', NULL, 2, 258.64, N'Destination RVDMF', N'Kirchgasse 9012', N'Graz', NULL, N'10157', N'Austria'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11073, 58, 2, '20080505 00:00:00.000', '20080602 00:00:00.000', NULL, 2, 24.95, N'Ship to 58-B', N'Calle Dr. Jorge Cash 4567', N'México D.F.', NULL, N'10262', N'Mexico'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11074, 73, 7, '20080506 00:00:00.000', '20080603 00:00:00.000', NULL, 2, 18.44, N'Ship to 73-A', N'Vinbæltet 1234', N'Kobenhavn', NULL, N'10310', N'Denmark'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11075, 68, 8, '20080506 00:00:00.000', '20080603 00:00:00.000', NULL, 2, 6.19, N'Ship to 68-A', N'Starenweg 6789', N'Genève', NULL, N'10294', N'Switzerland'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11076, 9, 4, '20080506 00:00:00.000', '20080603 00:00:00.000', NULL, 2, 38.28, N'Ship to 9-A', N'8901, rue des Bouchers', N'Marseille', NULL, N'10367', N'France'); +INSERT INTO SalesOrder(orderid, custid, empid, orderdate, requireddate, shippeddate, shipperid, freight, shipname, shipaddress, shipcity, shipregion, shippostalcode, shipcountry) + VALUES(11077, 65, 1, '20080506 00:00:00.000', '20080603 00:00:00.000', NULL, 2, 8.53, N'Ship to 65-A', N'7890 Milton Dr.', N'Albuquerque', N'NM', N'10285', N'USA'); + + + +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10248, 11, 14.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10248, 42, 9.80, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10248, 72, 34.80, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10249, 14, 18.60, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10249, 51, 42.40, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10250, 41, 7.70, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10250, 51, 42.40, 35, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10250, 65, 16.80, 15, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10251, 22, 16.80, 6, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10251, 57, 15.60, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10251, 65, 16.80, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10252, 20, 64.80, 40, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10252, 33, 2.00, 25, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10252, 60, 27.20, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10253, 31, 10.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10253, 39, 14.40, 42, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10253, 49, 16.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10254, 24, 3.60, 15, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10254, 55, 19.20, 21, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10254, 74, 8.00, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10255, 2, 15.20, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10255, 16, 13.90, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10255, 36, 15.20, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10255, 59, 44.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10256, 53, 26.20, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10256, 77, 10.40, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10257, 27, 35.10, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10257, 39, 14.40, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10257, 77, 10.40, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10258, 2, 15.20, 50, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10258, 5, 17.00, 65, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10258, 32, 25.60, 6, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10259, 21, 8.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10259, 37, 20.80, 1, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10260, 41, 7.70, 16, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10260, 57, 15.60, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10260, 62, 39.40, 15, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10260, 70, 12.00, 21, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10261, 21, 8.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10261, 35, 14.40, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10262, 5, 17.00, 12, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10262, 7, 24.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10262, 56, 30.40, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10263, 16, 13.90, 60, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10263, 24, 3.60, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10263, 30, 20.70, 60, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10263, 74, 8.00, 36, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10264, 2, 15.20, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10264, 41, 7.70, 25, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10265, 17, 31.20, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10265, 70, 12.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10266, 12, 30.40, 12, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10267, 40, 14.70, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10267, 59, 44.00, 70, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10267, 76, 14.40, 15, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10268, 29, 99.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10268, 72, 27.80, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10269, 33, 2.00, 60, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10269, 72, 27.80, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10270, 36, 15.20, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10270, 43, 36.80, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10271, 33, 2.00, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10272, 20, 64.80, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10272, 31, 10.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10272, 72, 27.80, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10273, 10, 24.80, 24, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10273, 31, 10.00, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10273, 33, 2.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10273, 40, 14.70, 60, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10273, 76, 14.40, 33, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10274, 71, 17.20, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10274, 72, 27.80, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10275, 24, 3.60, 12, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10275, 59, 44.00, 6, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10276, 10, 24.80, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10276, 13, 4.80, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10277, 28, 36.40, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10277, 62, 39.40, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10278, 44, 15.50, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10278, 59, 44.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10278, 63, 35.10, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10278, 73, 12.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10279, 17, 31.20, 15, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10280, 24, 3.60, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10280, 55, 19.20, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10280, 75, 6.20, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10281, 19, 7.30, 1, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10281, 24, 3.60, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10281, 35, 14.40, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10282, 30, 20.70, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10282, 57, 15.60, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10283, 15, 12.40, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10283, 19, 7.30, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10283, 60, 27.20, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10283, 72, 27.80, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10284, 27, 35.10, 15, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10284, 44, 15.50, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10284, 60, 27.20, 20, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10284, 67, 11.20, 5, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10285, 1, 14.40, 45, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10285, 40, 14.70, 40, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10285, 53, 26.20, 36, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10286, 35, 14.40, 100, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10286, 62, 39.40, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10287, 16, 13.90, 40, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10287, 34, 11.20, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10287, 46, 9.60, 15, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10288, 54, 5.90, 10, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10288, 68, 10.00, 3, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10289, 3, 8.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10289, 64, 26.60, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10290, 5, 17.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10290, 29, 99.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10290, 49, 16.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10290, 77, 10.40, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10291, 13, 4.80, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10291, 44, 15.50, 24, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10291, 51, 42.40, 2, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10292, 20, 64.80, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10293, 18, 50.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10293, 24, 3.60, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10293, 63, 35.10, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10293, 75, 6.20, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10294, 1, 14.40, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10294, 17, 31.20, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10294, 43, 36.80, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10294, 60, 27.20, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10294, 75, 6.20, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10295, 56, 30.40, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10296, 11, 16.80, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10296, 16, 13.90, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10296, 69, 28.80, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10297, 39, 14.40, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10297, 72, 27.80, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10298, 2, 15.20, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10298, 36, 15.20, 40, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10298, 59, 44.00, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10298, 62, 39.40, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10299, 19, 7.30, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10299, 70, 12.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10300, 66, 13.60, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10300, 68, 10.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10301, 40, 14.70, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10301, 56, 30.40, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10302, 17, 31.20, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10302, 28, 36.40, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10302, 43, 36.80, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10303, 40, 14.70, 40, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10303, 65, 16.80, 30, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10303, 68, 10.00, 15, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10304, 49, 16.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10304, 59, 44.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10304, 71, 17.20, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10305, 18, 50.00, 25, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10305, 29, 99.00, 25, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10305, 39, 14.40, 30, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10306, 30, 20.70, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10306, 53, 26.20, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10306, 54, 5.90, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10307, 62, 39.40, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10307, 68, 10.00, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10308, 69, 28.80, 1, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10308, 70, 12.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10309, 4, 17.60, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10309, 6, 20.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10309, 42, 11.20, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10309, 43, 36.80, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10309, 71, 17.20, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10310, 16, 13.90, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10310, 62, 39.40, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10311, 42, 11.20, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10311, 69, 28.80, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10312, 28, 36.40, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10312, 43, 36.80, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10312, 53, 26.20, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10312, 75, 6.20, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10313, 36, 15.20, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10314, 32, 25.60, 40, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10314, 58, 10.60, 30, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10314, 62, 39.40, 25, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10315, 34, 11.20, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10315, 70, 12.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10316, 41, 7.70, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10316, 62, 39.40, 70, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10317, 1, 14.40, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10318, 41, 7.70, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10318, 76, 14.40, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10319, 17, 31.20, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10319, 28, 36.40, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10319, 76, 14.40, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10320, 71, 17.20, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10321, 35, 14.40, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10322, 52, 5.60, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10323, 15, 12.40, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10323, 25, 11.20, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10323, 39, 14.40, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10324, 16, 13.90, 21, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10324, 35, 14.40, 70, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10324, 46, 9.60, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10324, 59, 44.00, 40, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10324, 63, 35.10, 80, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10325, 6, 20.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10325, 13, 4.80, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10325, 14, 18.60, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10325, 31, 10.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10325, 72, 27.80, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10326, 4, 17.60, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10326, 57, 15.60, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10326, 75, 6.20, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10327, 2, 15.20, 25, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10327, 11, 16.80, 50, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10327, 30, 20.70, 35, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10327, 58, 10.60, 30, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10328, 59, 44.00, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10328, 65, 16.80, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10328, 68, 10.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10329, 19, 7.30, 10, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10329, 30, 20.70, 8, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10329, 38, 210.80, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10329, 56, 30.40, 12, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10330, 26, 24.90, 50, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10330, 72, 27.80, 25, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10331, 54, 5.90, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10332, 18, 50.00, 40, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10332, 42, 11.20, 10, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10332, 47, 7.60, 16, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10333, 14, 18.60, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10333, 21, 8.00, 10, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10333, 71, 17.20, 40, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10334, 52, 5.60, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10334, 68, 10.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10335, 2, 15.20, 7, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10335, 31, 10.00, 25, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10335, 32, 25.60, 6, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10335, 51, 42.40, 48, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10336, 4, 17.60, 18, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10337, 23, 7.20, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10337, 26, 24.90, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10337, 36, 15.20, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10337, 37, 20.80, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10337, 72, 27.80, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10338, 17, 31.20, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10338, 30, 20.70, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10339, 4, 17.60, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10339, 17, 31.20, 70, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10339, 62, 39.40, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10340, 18, 50.00, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10340, 41, 7.70, 12, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10340, 43, 36.80, 40, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10341, 33, 2.00, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10341, 59, 44.00, 9, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10342, 2, 15.20, 24, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10342, 31, 10.00, 56, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10342, 36, 15.20, 40, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10342, 55, 19.20, 40, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10343, 64, 26.60, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10343, 68, 10.00, 4, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10343, 76, 14.40, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10344, 4, 17.60, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10344, 8, 32.00, 70, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10345, 8, 32.00, 70, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10345, 19, 7.30, 80, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10345, 42, 11.20, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10346, 17, 31.20, 36, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10346, 56, 30.40, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10347, 25, 11.20, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10347, 39, 14.40, 50, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10347, 40, 14.70, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10347, 75, 6.20, 6, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10348, 1, 14.40, 15, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10348, 23, 7.20, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10349, 54, 5.90, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10350, 50, 13.00, 15, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10350, 69, 28.80, 18, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10351, 38, 210.80, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10351, 41, 7.70, 13, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10351, 44, 15.50, 77, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10351, 65, 16.80, 10, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10352, 24, 3.60, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10352, 54, 5.90, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10353, 11, 16.80, 12, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10353, 38, 210.80, 50, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10354, 1, 14.40, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10354, 29, 99.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10355, 24, 3.60, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10355, 57, 15.60, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10356, 31, 10.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10356, 55, 19.20, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10356, 69, 28.80, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10357, 10, 24.80, 30, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10357, 26, 24.90, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10357, 60, 27.20, 8, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10358, 24, 3.60, 10, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10358, 34, 11.20, 10, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10358, 36, 15.20, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10359, 16, 13.90, 56, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10359, 31, 10.00, 70, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10359, 60, 27.20, 80, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10360, 28, 36.40, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10360, 29, 99.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10360, 38, 210.80, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10360, 49, 16.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10360, 54, 5.90, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10361, 39, 14.40, 54, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10361, 60, 27.20, 55, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10362, 25, 11.20, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10362, 51, 42.40, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10362, 54, 5.90, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10363, 31, 10.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10363, 75, 6.20, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10363, 76, 14.40, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10364, 69, 28.80, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10364, 71, 17.20, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10365, 11, 16.80, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10366, 65, 16.80, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10366, 77, 10.40, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10367, 34, 11.20, 36, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10367, 54, 5.90, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10367, 65, 16.80, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10367, 77, 10.40, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10368, 21, 8.00, 5, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10368, 28, 36.40, 13, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10368, 57, 15.60, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10368, 64, 26.60, 35, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10369, 29, 99.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10369, 56, 30.40, 18, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10370, 1, 14.40, 15, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10370, 64, 26.60, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10370, 74, 8.00, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10371, 36, 15.20, 6, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10372, 20, 64.80, 12, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10372, 38, 210.80, 40, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10372, 60, 27.20, 70, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10372, 72, 27.80, 42, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10373, 58, 10.60, 80, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10373, 71, 17.20, 50, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10374, 31, 10.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10374, 58, 10.60, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10375, 14, 18.60, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10375, 54, 5.90, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10376, 31, 10.00, 42, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10377, 28, 36.40, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10377, 39, 14.40, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10378, 71, 17.20, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10379, 41, 7.70, 8, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10379, 63, 35.10, 16, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10379, 65, 16.80, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10380, 30, 20.70, 18, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10380, 53, 26.20, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10380, 60, 27.20, 6, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10380, 70, 12.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10381, 74, 8.00, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10382, 5, 17.00, 32, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10382, 18, 50.00, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10382, 29, 99.00, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10382, 33, 2.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10382, 74, 8.00, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10383, 13, 4.80, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10383, 50, 13.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10383, 56, 30.40, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10384, 20, 64.80, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10384, 60, 27.20, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10385, 7, 24.00, 10, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10385, 60, 27.20, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10385, 68, 10.00, 8, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10386, 24, 3.60, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10386, 34, 11.20, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10387, 24, 3.60, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10387, 28, 36.40, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10387, 59, 44.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10387, 71, 17.20, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10388, 45, 7.60, 15, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10388, 52, 5.60, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10388, 53, 26.20, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10389, 10, 24.80, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10389, 55, 19.20, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10389, 62, 39.40, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10389, 70, 12.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10390, 31, 10.00, 60, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10390, 35, 14.40, 40, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10390, 46, 9.60, 45, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10390, 72, 27.80, 24, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10391, 13, 4.80, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10392, 69, 28.80, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10393, 2, 15.20, 25, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10393, 14, 18.60, 42, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10393, 25, 11.20, 7, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10393, 26, 24.90, 70, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10393, 31, 10.00, 32, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10394, 13, 4.80, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10394, 62, 39.40, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10395, 46, 9.60, 28, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10395, 53, 26.20, 70, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10395, 69, 28.80, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10396, 23, 7.20, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10396, 71, 17.20, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10396, 72, 27.80, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10397, 21, 8.00, 10, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10397, 51, 42.40, 18, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10398, 35, 14.40, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10398, 55, 19.20, 120, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10399, 68, 10.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10399, 71, 17.20, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10399, 76, 14.40, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10399, 77, 10.40, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10400, 29, 99.00, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10400, 35, 14.40, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10400, 49, 16.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10401, 30, 20.70, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10401, 56, 30.40, 70, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10401, 65, 16.80, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10401, 71, 17.20, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10402, 23, 7.20, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10402, 63, 35.10, 65, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10403, 16, 13.90, 21, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10403, 48, 10.20, 70, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10404, 26, 24.90, 30, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10404, 42, 11.20, 40, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10404, 49, 16.00, 30, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10405, 3, 8.00, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10406, 1, 14.40, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10406, 21, 8.00, 30, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10406, 28, 36.40, 42, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10406, 36, 15.20, 5, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10406, 40, 14.70, 2, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10407, 11, 16.80, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10407, 69, 28.80, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10407, 71, 17.20, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10408, 37, 20.80, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10408, 54, 5.90, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10408, 62, 39.40, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10409, 14, 18.60, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10409, 21, 8.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10410, 33, 2.00, 49, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10410, 59, 44.00, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10411, 41, 7.70, 25, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10411, 44, 15.50, 40, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10411, 59, 44.00, 9, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10412, 14, 18.60, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10413, 1, 14.40, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10413, 62, 39.40, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10413, 76, 14.40, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10414, 19, 7.30, 18, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10414, 33, 2.00, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10415, 17, 31.20, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10415, 33, 2.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10416, 19, 7.30, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10416, 53, 26.20, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10416, 57, 15.60, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10417, 38, 210.80, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10417, 46, 9.60, 2, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10417, 68, 10.00, 36, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10417, 77, 10.40, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10418, 2, 15.20, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10418, 47, 7.60, 55, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10418, 61, 22.80, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10418, 74, 8.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10419, 60, 27.20, 60, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10419, 69, 28.80, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10420, 9, 77.60, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10420, 13, 4.80, 2, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10420, 70, 12.00, 8, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10420, 73, 12.00, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10421, 19, 7.30, 4, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10421, 26, 24.90, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10421, 53, 26.20, 15, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10421, 77, 10.40, 10, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10422, 26, 24.90, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10423, 31, 10.00, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10423, 59, 44.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10424, 35, 14.40, 60, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10424, 38, 210.80, 49, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10424, 68, 10.00, 30, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10425, 55, 19.20, 10, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10425, 76, 14.40, 20, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10426, 56, 30.40, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10426, 64, 26.60, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10427, 14, 18.60, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10428, 46, 9.60, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10429, 50, 13.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10429, 63, 35.10, 35, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10430, 17, 31.20, 45, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10430, 21, 8.00, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10430, 56, 30.40, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10430, 59, 44.00, 70, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10431, 17, 31.20, 50, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10431, 40, 14.70, 50, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10431, 47, 7.60, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10432, 26, 24.90, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10432, 54, 5.90, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10433, 56, 30.40, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10434, 11, 16.80, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10434, 76, 14.40, 18, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10435, 2, 15.20, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10435, 22, 16.80, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10435, 72, 27.80, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10436, 46, 9.60, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10436, 56, 30.40, 40, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10436, 64, 26.60, 30, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10436, 75, 6.20, 24, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10437, 53, 26.20, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10438, 19, 7.30, 15, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10438, 34, 11.20, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10438, 57, 15.60, 15, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10439, 12, 30.40, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10439, 16, 13.90, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10439, 64, 26.60, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10439, 74, 8.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10440, 2, 15.20, 45, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10440, 16, 13.90, 49, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10440, 29, 99.00, 24, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10440, 61, 22.80, 90, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10441, 27, 35.10, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10442, 11, 16.80, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10442, 54, 5.90, 80, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10442, 66, 13.60, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10443, 11, 16.80, 6, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10443, 28, 36.40, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10444, 17, 31.20, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10444, 26, 24.90, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10444, 35, 14.40, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10444, 41, 7.70, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10445, 39, 14.40, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10445, 54, 5.90, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10446, 19, 7.30, 12, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10446, 24, 3.60, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10446, 31, 10.00, 3, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10446, 52, 5.60, 15, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10447, 19, 7.30, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10447, 65, 16.80, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10447, 71, 17.20, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10448, 26, 24.90, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10448, 40, 14.70, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10449, 10, 24.80, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10449, 52, 5.60, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10449, 62, 39.40, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10450, 10, 24.80, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10450, 54, 5.90, 6, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10451, 55, 19.20, 120, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10451, 64, 26.60, 35, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10451, 65, 16.80, 28, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10451, 77, 10.40, 55, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10452, 28, 36.40, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10452, 44, 15.50, 100, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10453, 48, 10.20, 15, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10453, 70, 12.00, 25, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10454, 16, 13.90, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10454, 33, 2.00, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10454, 46, 9.60, 10, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10455, 39, 14.40, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10455, 53, 26.20, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10455, 61, 22.80, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10455, 71, 17.20, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10456, 21, 8.00, 40, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10456, 49, 16.00, 21, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10457, 59, 44.00, 36, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10458, 26, 24.90, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10458, 28, 36.40, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10458, 43, 36.80, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10458, 56, 30.40, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10458, 71, 17.20, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10459, 7, 24.00, 16, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10459, 46, 9.60, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10459, 72, 27.80, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10460, 68, 10.00, 21, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10460, 75, 6.20, 4, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10461, 21, 8.00, 40, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10461, 30, 20.70, 28, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10461, 55, 19.20, 60, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10462, 13, 4.80, 1, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10462, 23, 7.20, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10463, 19, 7.30, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10463, 42, 11.20, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10464, 4, 17.60, 16, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10464, 43, 36.80, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10464, 56, 30.40, 30, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10464, 60, 27.20, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10465, 24, 3.60, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10465, 29, 99.00, 18, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10465, 40, 14.70, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10465, 45, 7.60, 30, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10465, 50, 13.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10466, 11, 16.80, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10466, 46, 9.60, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10467, 24, 3.60, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10467, 25, 11.20, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10468, 30, 20.70, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10468, 43, 36.80, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10469, 2, 15.20, 40, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10469, 16, 13.90, 35, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10469, 44, 15.50, 2, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10470, 18, 50.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10470, 23, 7.20, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10470, 64, 26.60, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10471, 7, 24.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10471, 56, 30.40, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10472, 24, 3.60, 80, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10472, 51, 42.40, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10473, 33, 2.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10473, 71, 17.20, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10474, 14, 18.60, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10474, 28, 36.40, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10474, 40, 14.70, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10474, 75, 6.20, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10475, 31, 10.00, 35, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10475, 66, 13.60, 60, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10475, 76, 14.40, 42, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10476, 55, 19.20, 2, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10476, 70, 12.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10477, 1, 14.40, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10477, 21, 8.00, 21, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10477, 39, 14.40, 20, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10478, 10, 24.80, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10479, 38, 210.80, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10479, 53, 26.20, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10479, 59, 44.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10479, 64, 26.60, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10480, 47, 7.60, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10480, 59, 44.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10481, 49, 16.00, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10481, 60, 27.20, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10482, 40, 14.70, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10483, 34, 11.20, 35, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10483, 77, 10.40, 30, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10484, 21, 8.00, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10484, 40, 14.70, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10484, 51, 42.40, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10485, 2, 15.20, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10485, 3, 8.00, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10485, 55, 19.20, 30, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10485, 70, 12.00, 60, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10486, 11, 16.80, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10486, 51, 42.40, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10486, 74, 8.00, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10487, 19, 7.30, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10487, 26, 24.90, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10487, 54, 5.90, 24, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10488, 59, 44.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10488, 73, 12.00, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10489, 11, 16.80, 15, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10489, 16, 13.90, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10490, 59, 44.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10490, 68, 10.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10490, 75, 6.20, 36, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10491, 44, 15.50, 15, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10491, 77, 10.40, 7, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10492, 25, 11.20, 60, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10492, 42, 11.20, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10493, 65, 16.80, 15, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10493, 66, 13.60, 10, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10493, 69, 28.80, 10, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10494, 56, 30.40, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10495, 23, 7.20, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10495, 41, 7.70, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10495, 77, 10.40, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10496, 31, 10.00, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10497, 56, 30.40, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10497, 72, 27.80, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10497, 77, 10.40, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10498, 24, 4.50, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10498, 40, 18.40, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10498, 42, 14.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10499, 28, 45.60, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10499, 49, 20.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10500, 15, 15.50, 12, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10500, 28, 45.60, 8, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10501, 54, 7.45, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10502, 45, 9.50, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10502, 53, 32.80, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10502, 67, 14.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10503, 14, 23.25, 70, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10503, 65, 21.05, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10504, 2, 19.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10504, 21, 10.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10504, 53, 32.80, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10504, 61, 28.50, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10505, 62, 49.30, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10506, 25, 14.00, 18, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10506, 70, 15.00, 14, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10507, 43, 46.00, 15, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10507, 48, 12.75, 15, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10508, 13, 6.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10508, 39, 18.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10509, 28, 45.60, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10510, 29, 123.79, 36, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10510, 75, 7.75, 36, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10511, 4, 22.00, 50, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10511, 7, 30.00, 50, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10511, 8, 40.00, 10, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10512, 24, 4.50, 10, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10512, 46, 12.00, 9, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10512, 47, 9.50, 6, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10512, 60, 34.00, 12, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10513, 21, 10.00, 40, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10513, 32, 32.00, 50, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10513, 61, 28.50, 15, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10514, 20, 81.00, 39, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10514, 28, 45.60, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10514, 56, 38.00, 70, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10514, 65, 21.05, 39, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10514, 75, 7.75, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10515, 9, 97.00, 16, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10515, 16, 17.45, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10515, 27, 43.90, 120, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10515, 33, 2.50, 16, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10515, 60, 34.00, 84, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10516, 18, 62.50, 25, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10516, 41, 9.65, 80, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10516, 42, 14.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10517, 52, 7.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10517, 59, 55.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10517, 70, 15.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10518, 24, 4.50, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10518, 38, 263.50, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10518, 44, 19.45, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10519, 10, 31.00, 16, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10519, 56, 38.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10519, 60, 34.00, 10, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10520, 24, 4.50, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10520, 53, 32.80, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10521, 35, 18.00, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10521, 41, 9.65, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10521, 68, 12.50, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10522, 1, 18.00, 40, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10522, 8, 40.00, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10522, 30, 25.89, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10522, 40, 18.40, 25, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10523, 17, 39.00, 25, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10523, 20, 81.00, 15, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10523, 37, 26.00, 18, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10523, 41, 9.65, 6, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10524, 10, 31.00, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10524, 30, 25.89, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10524, 43, 46.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10524, 54, 7.45, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10525, 36, 19.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10525, 40, 18.40, 15, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10526, 1, 18.00, 8, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10526, 13, 6.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10526, 56, 38.00, 30, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10527, 4, 22.00, 50, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10527, 36, 19.00, 30, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10528, 11, 21.00, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10528, 33, 2.50, 8, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10528, 72, 34.80, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10529, 55, 24.00, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10529, 68, 12.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10529, 69, 36.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10530, 17, 39.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10530, 43, 46.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10530, 61, 28.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10530, 76, 18.00, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10531, 59, 55.00, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10532, 30, 25.89, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10532, 66, 17.00, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10533, 4, 22.00, 50, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10533, 72, 34.80, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10533, 73, 15.00, 24, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10534, 30, 25.89, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10534, 40, 18.40, 10, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10534, 54, 7.45, 10, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10535, 11, 21.00, 50, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10535, 40, 18.40, 10, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10535, 57, 19.50, 5, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10535, 59, 55.00, 15, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10536, 12, 38.00, 15, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10536, 31, 12.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10536, 33, 2.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10536, 60, 34.00, 35, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10537, 31, 12.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10537, 51, 53.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10537, 58, 13.25, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10537, 72, 34.80, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10537, 73, 15.00, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10538, 70, 15.00, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10538, 72, 34.80, 1, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10539, 13, 6.00, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10539, 21, 10.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10539, 33, 2.50, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10539, 49, 20.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10540, 3, 10.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10540, 26, 31.23, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10540, 38, 263.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10540, 68, 12.50, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10541, 24, 4.50, 35, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10541, 38, 263.50, 4, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10541, 65, 21.05, 36, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10541, 71, 21.50, 9, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10542, 11, 21.00, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10542, 54, 7.45, 24, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10543, 12, 38.00, 30, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10543, 23, 9.00, 70, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10544, 28, 45.60, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10544, 67, 14.00, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10545, 11, 21.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10546, 7, 30.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10546, 35, 18.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10546, 62, 49.30, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10547, 32, 32.00, 24, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10547, 36, 19.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10548, 34, 14.00, 10, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10548, 41, 9.65, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10549, 31, 12.50, 55, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10549, 45, 9.50, 100, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10549, 51, 53.00, 48, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10550, 17, 39.00, 8, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10550, 19, 9.20, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10550, 21, 10.00, 6, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10550, 61, 28.50, 10, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10551, 16, 17.45, 40, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10551, 35, 18.00, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10551, 44, 19.45, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10552, 69, 36.00, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10552, 75, 7.75, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10553, 11, 21.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10553, 16, 17.45, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10553, 22, 21.00, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10553, 31, 12.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10553, 35, 18.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10554, 16, 17.45, 30, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10554, 23, 9.00, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10554, 62, 49.30, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10554, 77, 13.00, 10, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10555, 14, 23.25, 30, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10555, 19, 9.20, 35, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10555, 24, 4.50, 18, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10555, 51, 53.00, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10555, 56, 38.00, 40, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10556, 72, 34.80, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10557, 64, 33.25, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10557, 75, 7.75, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10558, 47, 9.50, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10558, 51, 53.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10558, 52, 7.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10558, 53, 32.80, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10558, 73, 15.00, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10559, 41, 9.65, 12, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10559, 55, 24.00, 18, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10560, 30, 25.89, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10560, 62, 49.30, 15, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10561, 44, 19.45, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10561, 51, 53.00, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10562, 33, 2.50, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10562, 62, 49.30, 10, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10563, 36, 19.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10563, 52, 7.00, 70, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10564, 17, 39.00, 16, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10564, 31, 12.50, 6, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10564, 55, 24.00, 25, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10565, 24, 4.50, 25, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10565, 64, 33.25, 18, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10566, 11, 21.00, 35, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10566, 18, 62.50, 18, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10566, 76, 18.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10567, 31, 12.50, 60, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10567, 51, 53.00, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10567, 59, 55.00, 40, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10568, 10, 31.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10569, 31, 12.50, 35, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10569, 76, 18.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10570, 11, 21.00, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10570, 56, 38.00, 60, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10571, 14, 23.25, 11, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10571, 42, 14.00, 28, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10572, 16, 17.45, 12, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10572, 32, 32.00, 10, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10572, 40, 18.40, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10572, 75, 7.75, 15, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10573, 17, 39.00, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10573, 34, 14.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10573, 53, 32.80, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10574, 33, 2.50, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10574, 40, 18.40, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10574, 62, 49.30, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10574, 64, 33.25, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10575, 59, 55.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10575, 63, 43.90, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10575, 72, 34.80, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10575, 76, 18.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10576, 1, 18.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10576, 31, 12.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10576, 44, 19.45, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10577, 39, 18.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10577, 75, 7.75, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10577, 77, 13.00, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10578, 35, 18.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10578, 57, 19.50, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10579, 15, 15.50, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10579, 75, 7.75, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10580, 14, 23.25, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10580, 41, 9.65, 9, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10580, 65, 21.05, 30, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10581, 75, 7.75, 50, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10582, 57, 19.50, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10582, 76, 18.00, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10583, 29, 123.79, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10583, 60, 34.00, 24, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10583, 69, 36.00, 10, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10584, 31, 12.50, 50, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10585, 47, 9.50, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10586, 52, 7.00, 4, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10587, 26, 31.23, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10587, 35, 18.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10587, 77, 13.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10588, 18, 62.50, 40, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10588, 42, 14.00, 100, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10589, 35, 18.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10590, 1, 18.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10590, 77, 13.00, 60, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10591, 3, 10.00, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10591, 7, 30.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10591, 54, 7.45, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10592, 15, 15.50, 25, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10592, 26, 31.23, 5, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10593, 20, 81.00, 21, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10593, 69, 36.00, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10593, 76, 18.00, 4, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10594, 52, 7.00, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10594, 58, 13.25, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10595, 35, 18.00, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10595, 61, 28.50, 120, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10595, 69, 36.00, 65, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10596, 56, 38.00, 5, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10596, 63, 43.90, 24, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10596, 75, 7.75, 30, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10597, 24, 4.50, 35, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10597, 57, 19.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10597, 65, 21.05, 12, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10598, 27, 43.90, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10598, 71, 21.50, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10599, 62, 49.30, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10600, 54, 7.45, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10600, 73, 15.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10601, 13, 6.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10601, 59, 55.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10602, 77, 13.00, 5, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10603, 22, 21.00, 48, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10603, 49, 20.00, 25, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10604, 48, 12.75, 6, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10604, 76, 18.00, 10, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10605, 16, 17.45, 30, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10605, 59, 55.00, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10605, 60, 34.00, 70, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10605, 71, 21.50, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10606, 4, 22.00, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10606, 55, 24.00, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10606, 62, 49.30, 10, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10607, 7, 30.00, 45, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10607, 17, 39.00, 100, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10607, 33, 2.50, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10607, 40, 18.40, 42, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10607, 72, 34.80, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10608, 56, 38.00, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10609, 1, 18.00, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10609, 10, 31.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10609, 21, 10.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10610, 36, 19.00, 21, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10611, 1, 18.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10611, 2, 19.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10611, 60, 34.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10612, 10, 31.00, 70, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10612, 36, 19.00, 55, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10612, 49, 20.00, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10612, 60, 34.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10612, 76, 18.00, 80, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10613, 13, 6.00, 8, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10613, 75, 7.75, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10614, 11, 21.00, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10614, 21, 10.00, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10614, 39, 18.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10615, 55, 24.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10616, 38, 263.50, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10616, 56, 38.00, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10616, 70, 15.00, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10616, 71, 21.50, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10617, 59, 55.00, 30, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10618, 6, 25.00, 70, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10618, 56, 38.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10618, 68, 12.50, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10619, 21, 10.00, 42, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10619, 22, 21.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10620, 24, 4.50, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10620, 52, 7.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10621, 19, 9.20, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10621, 23, 9.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10621, 70, 15.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10621, 71, 21.50, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10622, 2, 19.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10622, 68, 12.50, 18, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10623, 14, 23.25, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10623, 19, 9.20, 15, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10623, 21, 10.00, 25, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10623, 24, 4.50, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10623, 35, 18.00, 30, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10624, 28, 45.60, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10624, 29, 123.79, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10624, 44, 19.45, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10625, 14, 23.25, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10625, 42, 14.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10625, 60, 34.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10626, 53, 32.80, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10626, 60, 34.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10626, 71, 21.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10627, 62, 49.30, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10627, 73, 15.00, 35, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10628, 1, 18.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10629, 29, 123.79, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10629, 64, 33.25, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10630, 55, 24.00, 12, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10630, 76, 18.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10631, 75, 7.75, 8, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10632, 2, 19.00, 30, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10632, 33, 2.50, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10633, 12, 38.00, 36, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10633, 13, 6.00, 13, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10633, 26, 31.23, 35, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10633, 62, 49.30, 80, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10634, 7, 30.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10634, 18, 62.50, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10634, 51, 53.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10634, 75, 7.75, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10635, 4, 22.00, 10, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10635, 5, 21.35, 15, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10635, 22, 21.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10636, 4, 22.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10636, 58, 13.25, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10637, 11, 21.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10637, 50, 16.25, 25, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10637, 56, 38.00, 60, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10638, 45, 9.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10638, 65, 21.05, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10638, 72, 34.80, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10639, 18, 62.50, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10640, 69, 36.00, 20, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10640, 70, 15.00, 15, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10641, 2, 19.00, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10641, 40, 18.40, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10642, 21, 10.00, 30, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10642, 61, 28.50, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10643, 28, 45.60, 15, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10643, 39, 18.00, 21, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10643, 46, 12.00, 2, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10644, 18, 62.50, 4, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10644, 43, 46.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10644, 46, 12.00, 21, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10645, 18, 62.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10645, 36, 19.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10646, 1, 18.00, 15, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10646, 10, 31.00, 18, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10646, 71, 21.50, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10646, 77, 13.00, 35, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10647, 19, 9.20, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10647, 39, 18.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10648, 22, 21.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10648, 24, 4.50, 15, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10649, 28, 45.60, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10649, 72, 34.80, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10650, 30, 25.89, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10650, 53, 32.80, 25, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10650, 54, 7.45, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10651, 19, 9.20, 12, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10651, 22, 21.00, 20, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10652, 30, 25.89, 2, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10652, 42, 14.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10653, 16, 17.45, 30, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10653, 60, 34.00, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10654, 4, 22.00, 12, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10654, 39, 18.00, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10654, 54, 7.45, 6, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10655, 41, 9.65, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10656, 14, 23.25, 3, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10656, 44, 19.45, 28, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10656, 47, 9.50, 6, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10657, 15, 15.50, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10657, 41, 9.65, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10657, 46, 12.00, 45, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10657, 47, 9.50, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10657, 56, 38.00, 45, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10657, 60, 34.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10658, 21, 10.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10658, 40, 18.40, 70, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10658, 60, 34.00, 55, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10658, 77, 13.00, 70, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10659, 31, 12.50, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10659, 40, 18.40, 24, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10659, 70, 15.00, 40, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10660, 20, 81.00, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10661, 39, 18.00, 3, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10661, 58, 13.25, 49, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10662, 68, 12.50, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10663, 40, 18.40, 30, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10663, 42, 14.00, 30, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10663, 51, 53.00, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10664, 10, 31.00, 24, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10664, 56, 38.00, 12, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10664, 65, 21.05, 15, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10665, 51, 53.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10665, 59, 55.00, 1, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10665, 76, 18.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10666, 29, 123.79, 36, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10666, 65, 21.05, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10667, 69, 36.00, 45, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10667, 71, 21.50, 14, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10668, 31, 12.50, 8, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10668, 55, 24.00, 4, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10668, 64, 33.25, 15, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10669, 36, 19.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10670, 23, 9.00, 32, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10670, 46, 12.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10670, 67, 14.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10670, 73, 15.00, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10670, 75, 7.75, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10671, 16, 17.45, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10671, 62, 49.30, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10671, 65, 21.05, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10672, 38, 263.50, 15, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10672, 71, 21.50, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10673, 16, 17.45, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10673, 42, 14.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10673, 43, 46.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10674, 23, 9.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10675, 14, 23.25, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10675, 53, 32.80, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10675, 58, 13.25, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10676, 10, 31.00, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10676, 19, 9.20, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10676, 44, 19.45, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10677, 26, 31.23, 30, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10677, 33, 2.50, 8, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10678, 12, 38.00, 100, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10678, 33, 2.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10678, 41, 9.65, 120, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10678, 54, 7.45, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10679, 59, 55.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10680, 16, 17.45, 50, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10680, 31, 12.50, 20, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10680, 42, 14.00, 40, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10681, 19, 9.20, 30, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10681, 21, 10.00, 12, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10681, 64, 33.25, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10682, 33, 2.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10682, 66, 17.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10682, 75, 7.75, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10683, 52, 7.00, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10684, 40, 18.40, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10684, 47, 9.50, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10684, 60, 34.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10685, 10, 31.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10685, 41, 9.65, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10685, 47, 9.50, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10686, 17, 39.00, 30, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10686, 26, 31.23, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10687, 9, 97.00, 50, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10687, 29, 123.79, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10687, 36, 19.00, 6, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10688, 10, 31.00, 18, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10688, 28, 45.60, 60, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10688, 34, 14.00, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10689, 1, 18.00, 35, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10690, 56, 38.00, 20, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10690, 77, 13.00, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10691, 1, 18.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10691, 29, 123.79, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10691, 43, 46.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10691, 44, 19.45, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10691, 62, 49.30, 48, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10692, 63, 43.90, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10693, 9, 97.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10693, 54, 7.45, 60, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10693, 69, 36.00, 30, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10693, 73, 15.00, 15, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10694, 7, 30.00, 90, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10694, 59, 55.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10694, 70, 15.00, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10695, 8, 40.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10695, 12, 38.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10695, 24, 4.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10696, 17, 39.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10696, 46, 12.00, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10697, 19, 9.20, 7, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10697, 35, 18.00, 9, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10697, 58, 13.25, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10697, 70, 15.00, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10698, 11, 21.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10698, 17, 39.00, 8, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10698, 29, 123.79, 12, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10698, 65, 21.05, 65, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10698, 70, 15.00, 8, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10699, 47, 9.50, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10700, 1, 18.00, 5, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10700, 34, 14.00, 12, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10700, 68, 12.50, 40, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10700, 71, 21.50, 60, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10701, 59, 55.00, 42, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10701, 71, 21.50, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10701, 76, 18.00, 35, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10702, 3, 10.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10702, 76, 18.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10703, 2, 19.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10703, 59, 55.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10703, 73, 15.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10704, 4, 22.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10704, 24, 4.50, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10704, 48, 12.75, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10705, 31, 12.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10705, 32, 32.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10706, 16, 17.45, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10706, 43, 46.00, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10706, 59, 55.00, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10707, 55, 24.00, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10707, 57, 19.50, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10707, 70, 15.00, 28, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10708, 5, 21.35, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10708, 36, 19.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10709, 8, 40.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10709, 51, 53.00, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10709, 60, 34.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10710, 19, 9.20, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10710, 47, 9.50, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10711, 19, 9.20, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10711, 41, 9.65, 42, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10711, 53, 32.80, 120, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10712, 53, 32.80, 3, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10712, 56, 38.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10713, 10, 31.00, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10713, 26, 31.23, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10713, 45, 9.50, 110, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10713, 46, 12.00, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10714, 2, 19.00, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10714, 17, 39.00, 27, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10714, 47, 9.50, 50, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10714, 56, 38.00, 18, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10714, 58, 13.25, 12, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10715, 10, 31.00, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10715, 71, 21.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10716, 21, 10.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10716, 51, 53.00, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10716, 61, 28.50, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10717, 21, 10.00, 32, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10717, 54, 7.45, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10717, 69, 36.00, 25, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10718, 12, 38.00, 36, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10718, 16, 17.45, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10718, 36, 19.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10718, 62, 49.30, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10719, 18, 62.50, 12, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10719, 30, 25.89, 3, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10719, 54, 7.45, 40, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10720, 35, 18.00, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10720, 71, 21.50, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10721, 44, 19.45, 50, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10722, 2, 19.00, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10722, 31, 12.50, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10722, 68, 12.50, 45, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10722, 75, 7.75, 42, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10723, 26, 31.23, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10724, 10, 31.00, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10724, 61, 28.50, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10725, 41, 9.65, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10725, 52, 7.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10725, 55, 24.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10726, 4, 22.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10726, 11, 21.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10727, 17, 39.00, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10727, 56, 38.00, 10, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10727, 59, 55.00, 10, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10728, 30, 25.89, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10728, 40, 18.40, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10728, 55, 24.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10728, 60, 34.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10729, 1, 18.00, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10729, 21, 10.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10729, 50, 16.25, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10730, 16, 17.45, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10730, 31, 12.50, 3, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10730, 65, 21.05, 10, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10731, 21, 10.00, 40, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10731, 51, 53.00, 30, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10732, 76, 18.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10733, 14, 23.25, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10733, 28, 45.60, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10733, 52, 7.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10734, 6, 25.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10734, 30, 25.89, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10734, 76, 18.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10735, 61, 28.50, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10735, 77, 13.00, 2, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10736, 65, 21.05, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10736, 75, 7.75, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10737, 13, 6.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10737, 41, 9.65, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10738, 16, 17.45, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10739, 36, 19.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10739, 52, 7.00, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10740, 28, 45.60, 5, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10740, 35, 18.00, 35, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10740, 45, 9.50, 40, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10740, 56, 38.00, 14, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10741, 2, 19.00, 15, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10742, 3, 10.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10742, 60, 34.00, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10742, 72, 34.80, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10743, 46, 12.00, 28, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10744, 40, 18.40, 50, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10745, 18, 62.50, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10745, 44, 19.45, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10745, 59, 55.00, 45, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10745, 72, 34.80, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10746, 13, 6.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10746, 42, 14.00, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10746, 62, 49.30, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10746, 69, 36.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10747, 31, 12.50, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10747, 41, 9.65, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10747, 63, 43.90, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10747, 69, 36.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10748, 23, 9.00, 44, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10748, 40, 18.40, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10748, 56, 38.00, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10749, 56, 38.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10749, 59, 55.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10749, 76, 18.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10750, 14, 23.25, 5, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10750, 45, 9.50, 40, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10750, 59, 55.00, 25, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10751, 26, 31.23, 12, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10751, 30, 25.89, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10751, 50, 16.25, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10751, 73, 15.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10752, 1, 18.00, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10752, 69, 36.00, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10753, 45, 9.50, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10753, 74, 10.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10754, 40, 18.40, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10755, 47, 9.50, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10755, 56, 38.00, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10755, 57, 19.50, 14, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10755, 69, 36.00, 25, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10756, 18, 62.50, 21, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10756, 36, 19.00, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10756, 68, 12.50, 6, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10756, 69, 36.00, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10757, 34, 14.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10757, 59, 55.00, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10757, 62, 49.30, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10757, 64, 33.25, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10758, 26, 31.23, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10758, 52, 7.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10758, 70, 15.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10759, 32, 32.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10760, 25, 14.00, 12, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10760, 27, 43.90, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10760, 43, 46.00, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10761, 25, 14.00, 35, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10761, 75, 7.75, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10762, 39, 18.00, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10762, 47, 9.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10762, 51, 53.00, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10762, 56, 38.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10763, 21, 10.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10763, 22, 21.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10763, 24, 4.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10764, 3, 10.00, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10764, 39, 18.00, 130, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10765, 65, 21.05, 80, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10766, 2, 19.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10766, 7, 30.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10766, 68, 12.50, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10767, 42, 14.00, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10768, 22, 21.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10768, 31, 12.50, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10768, 60, 34.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10768, 71, 21.50, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10769, 41, 9.65, 30, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10769, 52, 7.00, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10769, 61, 28.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10769, 62, 49.30, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10770, 11, 21.00, 15, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10771, 71, 21.50, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10772, 29, 123.79, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10772, 59, 55.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10773, 17, 39.00, 33, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10773, 31, 12.50, 70, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10773, 75, 7.75, 7, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10774, 31, 12.50, 2, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10774, 66, 17.00, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10775, 10, 31.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10775, 67, 14.00, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10776, 31, 12.50, 16, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10776, 42, 14.00, 12, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10776, 45, 9.50, 27, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10776, 51, 53.00, 120, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10777, 42, 14.00, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10778, 41, 9.65, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10779, 16, 17.45, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10779, 62, 49.30, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10780, 70, 15.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10780, 77, 13.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10781, 54, 7.45, 3, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10781, 56, 38.00, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10781, 74, 10.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10782, 31, 12.50, 1, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10783, 31, 12.50, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10783, 38, 263.50, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10784, 36, 19.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10784, 39, 18.00, 2, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10784, 72, 34.80, 30, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10785, 10, 31.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10785, 75, 7.75, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10786, 8, 40.00, 30, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10786, 30, 25.89, 15, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10786, 75, 7.75, 42, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10787, 2, 19.00, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10787, 29, 123.79, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10788, 19, 9.20, 50, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10788, 75, 7.75, 40, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10789, 18, 62.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10789, 35, 18.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10789, 63, 43.90, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10789, 68, 12.50, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10790, 7, 30.00, 3, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10790, 56, 38.00, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10791, 29, 123.79, 14, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10791, 41, 9.65, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10792, 2, 19.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10792, 54, 7.45, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10792, 68, 12.50, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10793, 41, 9.65, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10793, 52, 7.00, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10794, 14, 23.25, 15, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10794, 54, 7.45, 6, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10795, 16, 17.45, 65, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10795, 17, 39.00, 35, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10796, 26, 31.23, 21, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10796, 44, 19.45, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10796, 64, 33.25, 35, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10796, 69, 36.00, 24, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10797, 11, 21.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10798, 62, 49.30, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10798, 72, 34.80, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10799, 13, 6.00, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10799, 24, 4.50, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10799, 59, 55.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10800, 11, 21.00, 50, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10800, 51, 53.00, 10, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10800, 54, 7.45, 7, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10801, 17, 39.00, 40, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10801, 29, 123.79, 20, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10802, 30, 25.89, 25, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10802, 51, 53.00, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10802, 55, 24.00, 60, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10802, 62, 49.30, 5, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10803, 19, 9.20, 24, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10803, 25, 14.00, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10803, 59, 55.00, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10804, 10, 31.00, 36, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10804, 28, 45.60, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10804, 49, 20.00, 4, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10805, 34, 14.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10805, 38, 263.50, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10806, 2, 19.00, 20, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10806, 65, 21.05, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10806, 74, 10.00, 15, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10807, 40, 18.40, 1, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10808, 56, 38.00, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10808, 76, 18.00, 50, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10809, 52, 7.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10810, 13, 6.00, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10810, 25, 14.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10810, 70, 15.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10811, 19, 9.20, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10811, 23, 9.00, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10811, 40, 18.40, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10812, 31, 12.50, 16, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10812, 72, 34.80, 40, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10812, 77, 13.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10813, 2, 19.00, 12, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10813, 46, 12.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10814, 41, 9.65, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10814, 43, 46.00, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10814, 48, 12.75, 8, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10814, 61, 28.50, 30, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10815, 33, 2.50, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10816, 38, 263.50, 30, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10816, 62, 49.30, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10817, 26, 31.23, 40, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10817, 38, 263.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10817, 40, 18.40, 60, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10817, 62, 49.30, 25, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10818, 32, 32.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10818, 41, 9.65, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10819, 43, 46.00, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10819, 75, 7.75, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10820, 56, 38.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10821, 35, 18.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10821, 51, 53.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10822, 62, 49.30, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10822, 70, 15.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10823, 11, 21.00, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10823, 57, 19.50, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10823, 59, 55.00, 40, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10823, 77, 13.00, 15, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10824, 41, 9.65, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10824, 70, 15.00, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10825, 26, 31.23, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10825, 53, 32.80, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10826, 31, 12.50, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10826, 57, 19.50, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10827, 10, 31.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10827, 39, 18.00, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10828, 20, 81.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10828, 38, 263.50, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10829, 2, 19.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10829, 8, 40.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10829, 13, 6.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10829, 60, 34.00, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10830, 6, 25.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10830, 39, 18.00, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10830, 60, 34.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10830, 68, 12.50, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10831, 19, 9.20, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10831, 35, 18.00, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10831, 38, 263.50, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10831, 43, 46.00, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10832, 13, 6.00, 3, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10832, 25, 14.00, 10, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10832, 44, 19.45, 16, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10832, 64, 33.25, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10833, 7, 30.00, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10833, 31, 12.50, 9, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10833, 53, 32.80, 9, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10834, 29, 123.79, 8, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10834, 30, 25.89, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10835, 59, 55.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10835, 77, 13.00, 2, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10836, 22, 21.00, 52, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10836, 35, 18.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10836, 57, 19.50, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10836, 60, 34.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10836, 64, 33.25, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10837, 13, 6.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10837, 40, 18.40, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10837, 47, 9.50, 40, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10837, 76, 18.00, 21, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10838, 1, 18.00, 4, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10838, 18, 62.50, 25, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10838, 36, 19.00, 50, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10839, 58, 13.25, 30, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10839, 72, 34.80, 15, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10840, 25, 14.00, 6, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10840, 39, 18.00, 10, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10841, 10, 31.00, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10841, 56, 38.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10841, 59, 55.00, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10841, 77, 13.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10842, 11, 21.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10842, 43, 46.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10842, 68, 12.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10842, 70, 15.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10843, 51, 53.00, 4, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10844, 22, 21.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10845, 23, 9.00, 70, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10845, 35, 18.00, 25, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10845, 42, 14.00, 42, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10845, 58, 13.25, 60, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10845, 64, 33.25, 48, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10846, 4, 22.00, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10846, 70, 15.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10846, 74, 10.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10847, 1, 18.00, 80, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10847, 19, 9.20, 12, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10847, 37, 26.00, 60, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10847, 45, 9.50, 36, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10847, 60, 34.00, 45, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10847, 71, 21.50, 55, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10848, 5, 21.35, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10848, 9, 97.00, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10849, 3, 10.00, 49, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10849, 26, 31.23, 18, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10850, 25, 14.00, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10850, 33, 2.50, 4, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10850, 70, 15.00, 30, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10851, 2, 19.00, 5, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10851, 25, 14.00, 10, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10851, 57, 19.50, 10, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10851, 59, 55.00, 42, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10852, 2, 19.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10852, 17, 39.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10852, 62, 49.30, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10853, 18, 62.50, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10854, 10, 31.00, 100, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10854, 13, 6.00, 65, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10855, 16, 17.45, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10855, 31, 12.50, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10855, 56, 38.00, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10855, 65, 21.05, 15, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10856, 2, 19.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10856, 42, 14.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10857, 3, 10.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10857, 26, 31.23, 35, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10857, 29, 123.79, 10, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10858, 7, 30.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10858, 27, 43.90, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10858, 70, 15.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10859, 24, 4.50, 40, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10859, 54, 7.45, 35, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10859, 64, 33.25, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10860, 51, 53.00, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10860, 76, 18.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10861, 17, 39.00, 42, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10861, 18, 62.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10861, 21, 10.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10861, 33, 2.50, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10861, 62, 49.30, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10862, 11, 21.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10862, 52, 7.00, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10863, 1, 18.00, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10863, 58, 13.25, 12, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10864, 35, 18.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10864, 67, 14.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10865, 38, 263.50, 60, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10865, 39, 18.00, 80, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10866, 2, 19.00, 21, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10866, 24, 4.50, 6, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10866, 30, 25.89, 40, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10867, 53, 32.80, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10868, 26, 31.23, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10868, 35, 18.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10868, 49, 20.00, 42, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10869, 1, 18.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10869, 11, 21.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10869, 23, 9.00, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10869, 68, 12.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10870, 35, 18.00, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10870, 51, 53.00, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10871, 6, 25.00, 50, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10871, 16, 17.45, 12, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10871, 17, 39.00, 16, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10872, 55, 24.00, 10, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10872, 62, 49.30, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10872, 64, 33.25, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10872, 65, 21.05, 21, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10873, 21, 10.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10873, 28, 45.60, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10874, 10, 31.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10875, 19, 9.20, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10875, 47, 9.50, 21, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10875, 49, 20.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10876, 46, 12.00, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10876, 64, 33.25, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10877, 16, 17.45, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10877, 18, 62.50, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10878, 20, 81.00, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10879, 40, 18.40, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10879, 65, 21.05, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10879, 76, 18.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10880, 23, 9.00, 30, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10880, 61, 28.50, 30, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10880, 70, 15.00, 50, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10881, 73, 15.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10882, 42, 14.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10882, 49, 20.00, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10882, 54, 7.45, 32, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10883, 24, 4.50, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10884, 21, 10.00, 40, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10884, 56, 38.00, 21, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10884, 65, 21.05, 12, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10885, 2, 19.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10885, 24, 4.50, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10885, 70, 15.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10885, 77, 13.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10886, 10, 31.00, 70, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10886, 31, 12.50, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10886, 77, 13.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10887, 25, 14.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10888, 2, 19.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10888, 68, 12.50, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10889, 11, 21.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10889, 38, 263.50, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10890, 17, 39.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10890, 34, 14.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10890, 41, 9.65, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10891, 30, 25.89, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10892, 59, 55.00, 40, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10893, 8, 40.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10893, 24, 4.50, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10893, 29, 123.79, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10893, 30, 25.89, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10893, 36, 19.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10894, 13, 6.00, 28, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10894, 69, 36.00, 50, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10894, 75, 7.75, 120, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10895, 24, 4.50, 110, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10895, 39, 18.00, 45, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10895, 40, 18.40, 91, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10895, 60, 34.00, 100, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10896, 45, 9.50, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10896, 56, 38.00, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10897, 29, 123.79, 80, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10897, 30, 25.89, 36, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10898, 13, 6.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10899, 39, 18.00, 8, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10900, 70, 15.00, 3, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10901, 41, 9.65, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10901, 71, 21.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10902, 55, 24.00, 30, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10902, 62, 49.30, 6, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10903, 13, 6.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10903, 65, 21.05, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10903, 68, 12.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10904, 58, 13.25, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10904, 62, 49.30, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10905, 1, 18.00, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10906, 61, 28.50, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10907, 75, 7.75, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10908, 7, 30.00, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10908, 52, 7.00, 14, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10909, 7, 30.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10909, 16, 17.45, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10909, 41, 9.65, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10910, 19, 9.20, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10910, 49, 20.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10910, 61, 28.50, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10911, 1, 18.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10911, 17, 39.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10911, 67, 14.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10912, 11, 21.00, 40, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10912, 29, 123.79, 60, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10913, 4, 22.00, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10913, 33, 2.50, 40, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10913, 58, 13.25, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10914, 71, 21.50, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10915, 17, 39.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10915, 33, 2.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10915, 54, 7.45, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10916, 16, 17.45, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10916, 32, 32.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10916, 57, 19.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10917, 30, 25.89, 1, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10917, 60, 34.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10918, 1, 18.00, 60, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10918, 60, 34.00, 25, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10919, 16, 17.45, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10919, 25, 14.00, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10919, 40, 18.40, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10920, 50, 16.25, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10921, 35, 18.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10921, 63, 43.90, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10922, 17, 39.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10922, 24, 4.50, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10923, 42, 14.00, 10, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10923, 43, 46.00, 10, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10923, 67, 14.00, 24, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10924, 10, 31.00, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10924, 28, 45.60, 30, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10924, 75, 7.75, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10925, 36, 19.00, 25, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10925, 52, 7.00, 12, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10926, 11, 21.00, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10926, 13, 6.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10926, 19, 9.20, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10926, 72, 34.80, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10927, 20, 81.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10927, 52, 7.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10927, 76, 18.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10928, 47, 9.50, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10928, 76, 18.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10929, 21, 10.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10929, 75, 7.75, 49, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10929, 77, 13.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10930, 21, 10.00, 36, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10930, 27, 43.90, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10930, 55, 24.00, 25, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10930, 58, 13.25, 30, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10931, 13, 6.00, 42, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10931, 57, 19.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10932, 16, 17.45, 30, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10932, 62, 49.30, 14, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10932, 72, 34.80, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10932, 75, 7.75, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10933, 53, 32.80, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10933, 61, 28.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10934, 6, 25.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10935, 1, 18.00, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10935, 18, 62.50, 4, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10935, 23, 9.00, 8, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10936, 36, 19.00, 30, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10937, 28, 45.60, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10937, 34, 14.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10938, 13, 6.00, 20, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10938, 43, 46.00, 24, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10938, 60, 34.00, 49, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10938, 71, 21.50, 35, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10939, 2, 19.00, 10, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10939, 67, 14.00, 40, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10940, 7, 30.00, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10940, 13, 6.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10941, 31, 12.50, 44, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10941, 62, 49.30, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10941, 68, 12.50, 80, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10941, 72, 34.80, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10942, 49, 20.00, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10943, 13, 6.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10943, 22, 21.00, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10943, 46, 12.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10944, 11, 21.00, 5, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10944, 44, 19.45, 18, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10944, 56, 38.00, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10945, 13, 6.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10945, 31, 12.50, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10946, 10, 31.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10946, 24, 4.50, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10946, 77, 13.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10947, 59, 55.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10948, 50, 16.25, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10948, 51, 53.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10948, 55, 24.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10949, 6, 25.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10949, 10, 31.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10949, 17, 39.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10949, 62, 49.30, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10950, 4, 22.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10951, 33, 2.50, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10951, 41, 9.65, 6, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10951, 75, 7.75, 50, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10952, 6, 25.00, 16, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10952, 28, 45.60, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10953, 20, 81.00, 50, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10953, 31, 12.50, 50, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10954, 16, 17.45, 28, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10954, 31, 12.50, 25, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10954, 45, 9.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10954, 60, 34.00, 24, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10955, 75, 7.75, 12, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10956, 21, 10.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10956, 47, 9.50, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10956, 51, 53.00, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10957, 30, 25.89, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10957, 35, 18.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10957, 64, 33.25, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10958, 5, 21.35, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10958, 7, 30.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10958, 72, 34.80, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10959, 75, 7.75, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10960, 24, 4.50, 10, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10960, 41, 9.65, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10961, 52, 7.00, 6, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10961, 76, 18.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10962, 7, 30.00, 45, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10962, 13, 6.00, 77, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10962, 53, 32.80, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10962, 69, 36.00, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10962, 76, 18.00, 44, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10963, 60, 34.00, 2, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10964, 18, 62.50, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10964, 38, 263.50, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10964, 69, 36.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10965, 51, 53.00, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10966, 37, 26.00, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10966, 56, 38.00, 12, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10966, 62, 49.30, 12, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10967, 19, 9.20, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10967, 49, 20.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10968, 12, 38.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10968, 24, 4.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10968, 64, 33.25, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10969, 46, 12.00, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10970, 52, 7.00, 40, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10971, 29, 123.79, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10972, 17, 39.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10972, 33, 2.50, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10973, 26, 31.23, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10973, 41, 9.65, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10973, 75, 7.75, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10974, 63, 43.90, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10975, 8, 40.00, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10975, 75, 7.75, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10976, 28, 45.60, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10977, 39, 18.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10977, 47, 9.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10977, 51, 53.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10977, 63, 43.90, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10978, 8, 40.00, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10978, 21, 10.00, 40, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10978, 40, 18.40, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10978, 44, 19.45, 6, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10979, 7, 30.00, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10979, 12, 38.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10979, 24, 4.50, 80, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10979, 27, 43.90, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10979, 31, 12.50, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10979, 63, 43.90, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10980, 75, 7.75, 40, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10981, 38, 263.50, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10982, 7, 30.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10982, 43, 46.00, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10983, 13, 6.00, 84, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10983, 57, 19.50, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10984, 16, 17.45, 55, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10984, 24, 4.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10984, 36, 19.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10985, 16, 17.45, 36, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10985, 18, 62.50, 8, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10985, 32, 32.00, 35, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10986, 11, 21.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10986, 20, 81.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10986, 76, 18.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10986, 77, 13.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10987, 7, 30.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10987, 43, 46.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10987, 72, 34.80, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10988, 7, 30.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10988, 62, 49.30, 40, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10989, 6, 25.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10989, 11, 21.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10989, 41, 9.65, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10990, 21, 10.00, 65, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10990, 34, 14.00, 60, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10990, 55, 24.00, 65, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10990, 61, 28.50, 66, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10991, 2, 19.00, 50, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10991, 70, 15.00, 20, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10991, 76, 18.00, 90, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10992, 72, 34.80, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10993, 29, 123.79, 50, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10993, 41, 9.65, 35, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10994, 59, 55.00, 18, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10995, 51, 53.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10995, 60, 34.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10996, 42, 14.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10997, 32, 32.00, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10997, 46, 12.00, 20, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10997, 52, 7.00, 20, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10998, 24, 4.50, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10998, 61, 28.50, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10998, 74, 10.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10998, 75, 7.75, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10999, 41, 9.65, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10999, 51, 53.00, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(10999, 77, 13.00, 21, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11000, 4, 22.00, 25, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11000, 24, 4.50, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11000, 77, 13.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11001, 7, 30.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11001, 22, 21.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11001, 46, 12.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11001, 55, 24.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11002, 13, 6.00, 56, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11002, 35, 18.00, 15, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11002, 42, 14.00, 24, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11002, 55, 24.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11003, 1, 18.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11003, 40, 18.40, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11003, 52, 7.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11004, 26, 31.23, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11004, 76, 18.00, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11005, 1, 18.00, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11005, 59, 55.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11006, 1, 18.00, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11006, 29, 123.79, 2, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11007, 8, 40.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11007, 29, 123.79, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11007, 42, 14.00, 14, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11008, 28, 45.60, 70, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11008, 34, 14.00, 90, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11008, 71, 21.50, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11009, 24, 4.50, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11009, 36, 19.00, 18, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11009, 60, 34.00, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11010, 7, 30.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11010, 24, 4.50, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11011, 58, 13.25, 40, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11011, 71, 21.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11012, 19, 9.20, 50, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11012, 60, 34.00, 36, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11012, 71, 21.50, 60, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11013, 23, 9.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11013, 42, 14.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11013, 45, 9.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11013, 68, 12.50, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11014, 41, 9.65, 28, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11015, 30, 25.89, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11015, 77, 13.00, 18, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11016, 31, 12.50, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11016, 36, 19.00, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11017, 3, 10.00, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11017, 59, 55.00, 110, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11017, 70, 15.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11018, 12, 38.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11018, 18, 62.50, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11018, 56, 38.00, 5, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11019, 46, 12.00, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11019, 49, 20.00, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11020, 10, 31.00, 24, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11021, 2, 19.00, 11, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11021, 20, 81.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11021, 26, 31.23, 63, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11021, 51, 53.00, 44, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11021, 72, 34.80, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11022, 19, 9.20, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11022, 69, 36.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11023, 7, 30.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11023, 43, 46.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11024, 26, 31.23, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11024, 33, 2.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11024, 65, 21.05, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11024, 71, 21.50, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11025, 1, 18.00, 10, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11025, 13, 6.00, 20, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11026, 18, 62.50, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11026, 51, 53.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11027, 24, 4.50, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11027, 62, 49.30, 21, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11028, 55, 24.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11028, 59, 55.00, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11029, 56, 38.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11029, 63, 43.90, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11030, 2, 19.00, 100, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11030, 5, 21.35, 70, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11030, 29, 123.79, 60, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11030, 59, 55.00, 100, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11031, 1, 18.00, 45, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11031, 13, 6.00, 80, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11031, 24, 4.50, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11031, 64, 33.25, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11031, 71, 21.50, 16, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11032, 36, 19.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11032, 38, 263.50, 25, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11032, 59, 55.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11033, 53, 32.80, 70, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11033, 69, 36.00, 36, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11034, 21, 10.00, 15, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11034, 44, 19.45, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11034, 61, 28.50, 6, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11035, 1, 18.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11035, 35, 18.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11035, 42, 14.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11035, 54, 7.45, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11036, 13, 6.00, 7, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11036, 59, 55.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11037, 70, 15.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11038, 40, 18.40, 5, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11038, 52, 7.00, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11038, 71, 21.50, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11039, 28, 45.60, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11039, 35, 18.00, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11039, 49, 20.00, 60, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11039, 57, 19.50, 28, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11040, 21, 10.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11041, 2, 19.00, 30, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11041, 63, 43.90, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11042, 44, 19.45, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11042, 61, 28.50, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11043, 11, 21.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11044, 62, 49.30, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11045, 33, 2.50, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11045, 51, 53.00, 24, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11046, 12, 38.00, 20, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11046, 32, 32.00, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11046, 35, 18.00, 18, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11047, 1, 18.00, 25, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11047, 5, 21.35, 30, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11048, 68, 12.50, 42, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11049, 2, 19.00, 10, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11049, 12, 38.00, 4, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11050, 76, 18.00, 50, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11051, 24, 4.50, 10, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11052, 43, 46.00, 30, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11052, 61, 28.50, 10, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11053, 18, 62.50, 35, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11053, 32, 32.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11053, 64, 33.25, 25, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11054, 33, 2.50, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11054, 67, 14.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11055, 24, 4.50, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11055, 25, 14.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11055, 51, 53.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11055, 57, 19.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11056, 7, 30.00, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11056, 55, 24.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11056, 60, 34.00, 50, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11057, 70, 15.00, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11058, 21, 10.00, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11058, 60, 34.00, 21, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11058, 61, 28.50, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11059, 13, 6.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11059, 17, 39.00, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11059, 60, 34.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11060, 60, 34.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11060, 77, 13.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11061, 60, 34.00, 15, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11062, 53, 32.80, 10, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11062, 70, 15.00, 12, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11063, 34, 14.00, 30, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11063, 40, 18.40, 40, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11063, 41, 9.65, 30, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11064, 17, 39.00, 77, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11064, 41, 9.65, 12, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11064, 53, 32.80, 25, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11064, 55, 24.00, 4, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11064, 68, 12.50, 55, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11065, 30, 25.89, 4, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11065, 54, 7.45, 20, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11066, 16, 17.45, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11066, 19, 9.20, 42, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11066, 34, 14.00, 35, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11067, 41, 9.65, 9, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11068, 28, 45.60, 8, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11068, 43, 46.00, 36, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11068, 77, 13.00, 28, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11069, 39, 18.00, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11070, 1, 18.00, 40, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11070, 2, 19.00, 20, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11070, 16, 17.45, 30, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11070, 31, 12.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11071, 7, 30.00, 15, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11071, 13, 6.00, 10, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11072, 2, 19.00, 8, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11072, 41, 9.65, 40, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11072, 50, 16.25, 22, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11072, 64, 33.25, 130, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11073, 11, 21.00, 10, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11073, 24, 4.50, 20, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11074, 16, 17.45, 14, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11075, 2, 19.00, 10, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11075, 46, 12.00, 30, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11075, 76, 18.00, 2, 0.15); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11076, 6, 25.00, 20, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11076, 14, 23.25, 20, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11076, 19, 9.20, 10, 0.25); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 2, 19.00, 24, 0.2); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 3, 10.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 4, 22.00, 1, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 6, 25.00, 1, 0.02); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 7, 30.00, 1, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 8, 40.00, 2, 0.1); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 10, 31.00, 1, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 12, 38.00, 2, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 13, 6.00, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 14, 23.25, 1, 0.03); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 16, 17.45, 2, 0.03); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 20, 81.00, 1, 0.04); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 23, 9.00, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 32, 32.00, 1, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 39, 18.00, 2, 0.05); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 41, 9.65, 3, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 46, 12.00, 3, 0.02); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 52, 7.00, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 55, 24.00, 2, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 60, 34.00, 2, 0.06); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 64, 33.25, 2, 0.03); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 66, 17.00, 1, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 73, 15.00, 2, 0.01); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 75, 7.75, 4, 0); +INSERT INTO OrderDetail(orderid, productid, unitprice, qty, discount) + VALUES(11077, 77, 13.00, 2, 0); + + + + +-- Region + +INSERT INTO Region VALUES (1,'Eastern'); +INSERT INTO Region VALUES (2,'Western'); +INSERT INTO Region VALUES (3,'Northern'); +INSERT INTO Region VALUES (4,'Southern'); + +-- Territory + +INSERT INTO Territory VALUES ('01581','Westboro',1); +INSERT INTO Territory VALUES ('01730','Bedford',1); +INSERT INTO Territory VALUES ('01833','Georgetow',1); +INSERT INTO Territory VALUES ('02116','Boston',1); +INSERT INTO Territory VALUES ('02139','Cambridge',1); +INSERT INTO Territory VALUES ('02184','Braintree',1); +INSERT INTO Territory VALUES ('02903','Providence',1); +INSERT INTO Territory VALUES ('03049','Hollis',3); +INSERT INTO Territory VALUES ('03801','Portsmouth',3); +INSERT INTO Territory VALUES ('06897','Wilton',1); +INSERT INTO Territory VALUES ('07960','Morristown',1); +INSERT INTO Territory VALUES ('08837','Edison',1); +INSERT INTO Territory VALUES ('10019','New York',1); +INSERT INTO Territory VALUES ('10038','New York',1); +INSERT INTO Territory VALUES ('11747','Mellvile',1); +INSERT INTO Territory VALUES ('14450','Fairport',1); +INSERT INTO Territory VALUES ('19428','Philadelphia',3); +INSERT INTO Territory VALUES ('19713','Neward',1); +INSERT INTO Territory VALUES ('20852','Rockville',1); +INSERT INTO Territory VALUES ('27403','Greensboro',1); +INSERT INTO Territory VALUES ('27511','Cary',1); +INSERT INTO Territory VALUES ('29202','Columbia',4); +INSERT INTO Territory VALUES ('30346','Atlanta',4); +INSERT INTO Territory VALUES ('31406','Savannah',4); +INSERT INTO Territory VALUES ('32859','Orlando',4); +INSERT INTO Territory VALUES ('33607','Tampa',4); +INSERT INTO Territory VALUES ('40222','Louisville',1); +INSERT INTO Territory VALUES ('44122','Beachwood',3); +INSERT INTO Territory VALUES ('45839','Findlay',3); +INSERT INTO Territory VALUES ('48075','Southfield',3); +INSERT INTO Territory VALUES ('48084','Troy',3); +INSERT INTO Territory VALUES ('48304','Bloomfield Hills',3); +INSERT INTO Territory VALUES ('53404','Racine',3); +INSERT INTO Territory VALUES ('55113','Roseville',3); +INSERT INTO Territory VALUES ('55439','Minneapolis',3); +INSERT INTO Territory VALUES ('60179','Hoffman Estates',2); +INSERT INTO Territory VALUES ('60601','Chicago',2); +INSERT INTO Territory VALUES ('72716','Bentonville',4); +INSERT INTO Territory VALUES ('75234','Dallas',4); +INSERT INTO Territory VALUES ('78759','Austin',4); +INSERT INTO Territory VALUES ('80202','Denver',2); +INSERT INTO Territory VALUES ('80909','Colorado Springs',2); +INSERT INTO Territory VALUES ('85014','Phoenix',2); +INSERT INTO Territory VALUES ('85251','Scottsdale',2); +INSERT INTO Territory VALUES ('90405','Santa Monica',2); +INSERT INTO Territory VALUES ('94025','Menlo Park',2); +INSERT INTO Territory VALUES ('94105','San Francisco',2); +INSERT INTO Territory VALUES ('95008','Campbell',2); +INSERT INTO Territory VALUES ('95054','Santa Clara',2); +INSERT INTO Territory VALUES ('95060','Santa Cruz',2); +INSERT INTO Territory VALUES ('98004','Bellevue',2); +INSERT INTO Territory VALUES ('98052','Redmond',2); +INSERT INTO Territory VALUES ('98104','Seattle',2); + +-- EmployeeTerritory + +INSERT INTO EmployeeTerritory VALUES (1,'06897'); +INSERT INTO EmployeeTerritory VALUES (1,'19713'); +INSERT INTO EmployeeTerritory VALUES (2,'01581'); +INSERT INTO EmployeeTerritory VALUES (2,'01730'); +INSERT INTO EmployeeTerritory VALUES (2,'01833'); +INSERT INTO EmployeeTerritory VALUES (2,'02116'); +INSERT INTO EmployeeTerritory VALUES (2,'02139'); +INSERT INTO EmployeeTerritory VALUES (2,'02184'); +INSERT INTO EmployeeTerritory VALUES (2,'40222'); +INSERT INTO EmployeeTerritory VALUES (3,'30346'); +INSERT INTO EmployeeTerritory VALUES (3,'31406'); +INSERT INTO EmployeeTerritory VALUES (3,'32859'); +INSERT INTO EmployeeTerritory VALUES (3,'33607'); +INSERT INTO EmployeeTerritory VALUES (4,'20852'); +INSERT INTO EmployeeTerritory VALUES (4,'27403'); +INSERT INTO EmployeeTerritory VALUES (4,'27511'); +INSERT INTO EmployeeTerritory VALUES (5,'02903'); +INSERT INTO EmployeeTerritory VALUES (5,'07960'); +INSERT INTO EmployeeTerritory VALUES (5,'08837'); +INSERT INTO EmployeeTerritory VALUES (5,'10019'); +INSERT INTO EmployeeTerritory VALUES (5,'10038'); +INSERT INTO EmployeeTerritory VALUES (5,'11747'); +INSERT INTO EmployeeTerritory VALUES (5,'14450'); +INSERT INTO EmployeeTerritory VALUES (6,'85014'); +INSERT INTO EmployeeTerritory VALUES (6,'85251'); +INSERT INTO EmployeeTerritory VALUES (6,'98004'); +INSERT INTO EmployeeTerritory VALUES (6,'98052'); +INSERT INTO EmployeeTerritory VALUES (6,'98104'); +INSERT INTO EmployeeTerritory VALUES (7,'60179'); +INSERT INTO EmployeeTerritory VALUES (7,'60601'); +INSERT INTO EmployeeTerritory VALUES (7,'80202'); +INSERT INTO EmployeeTerritory VALUES (7,'80909'); +INSERT INTO EmployeeTerritory VALUES (7,'90405'); +INSERT INTO EmployeeTerritory VALUES (7,'94025'); +INSERT INTO EmployeeTerritory VALUES (7,'94105'); +INSERT INTO EmployeeTerritory VALUES (7,'95008'); +INSERT INTO EmployeeTerritory VALUES (7,'95054'); +INSERT INTO EmployeeTerritory VALUES (7,'95060'); +INSERT INTO EmployeeTerritory VALUES (8,'19428'); +INSERT INTO EmployeeTerritory VALUES (8,'44122'); +INSERT INTO EmployeeTerritory VALUES (8,'45839'); +INSERT INTO EmployeeTerritory VALUES (8,'53404'); +INSERT INTO EmployeeTerritory VALUES (9,'03049'); +INSERT INTO EmployeeTerritory VALUES (9,'03801'); +INSERT INTO EmployeeTerritory VALUES (9,'48075'); +INSERT INTO EmployeeTerritory VALUES (9,'48084'); +INSERT INTO EmployeeTerritory VALUES (9,'48304'); +INSERT INTO EmployeeTerritory VALUES (9,'55113'); +INSERT INTO EmployeeTerritory VALUES (9,'55439'); + + diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/01-node-labels.mmd b/asciidoc/courses/importing-relational-to-graph/diagrams/01-node-labels.mmd new file mode 100644 index 000000000..49a449c36 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/diagrams/01-node-labels.mmd @@ -0,0 +1,38 @@ +%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#4C8EDA', 'primaryTextColor': '#fff', 'primaryBorderColor': '#2563EB', 'lineColor': '#64748B', 'secondaryColor': '#F59E0B', 'tertiaryColor': '#10B981'}}}%% +graph TB + subgraph "Northwind Graph Model - Node Labels" + C((Customer)) + O((Order)) + P((Product)) + Cat((Category)) + S((Supplier)) + E((Employee)) + Sh((Shipper)) + end + + subgraph "Source Tables" + T1[customers table] + T2[orders table] + T3[products table] + T4[categories table] + T5[suppliers table] + T6[employees table] + T7[shippers table] + end + + T1 -->|becomes| C + T2 -->|becomes| O + T3 -->|becomes| P + T4 -->|becomes| Cat + T5 -->|becomes| S + T6 -->|becomes| E + T7 -->|becomes| Sh + + style C fill:#4C8EDA,stroke:#2563EB,color:#fff + style O fill:#F59E0B,stroke:#D97706,color:#fff + style P fill:#10B981,stroke:#059669,color:#fff + style Cat fill:#8B5CF6,stroke:#7C3AED,color:#fff + style S fill:#EC4899,stroke:#DB2777,color:#fff + style E fill:#06B6D4,stroke:#0891B2,color:#fff + style Sh fill:#F97316,stroke:#EA580C,color:#fff + diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/01-node-labels.png b/asciidoc/courses/importing-relational-to-graph/diagrams/01-node-labels.png new file mode 100644 index 000000000..67da3423b Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/diagrams/01-node-labels.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/02-customer-placed-order.mmd b/asciidoc/courses/importing-relational-to-graph/diagrams/02-customer-placed-order.mmd new file mode 100644 index 000000000..cd84633a7 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/diagrams/02-customer-placed-order.mmd @@ -0,0 +1,19 @@ +%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#4C8EDA', 'primaryTextColor': '#fff', 'lineColor': '#64748B'}}}%% +graph LR + subgraph "Graph Model" + C((Customer)) + O((Order)) + C -->|PLACED| O + end + + subgraph "Relational Model" + CT[customers tablecustomer_id PK] + OT[orders tableorder_id PKcustomer_id FK] + CT -.->|referenced by| OT + end + + style C fill:#4C8EDA,stroke:#2563EB,color:#fff + style O fill:#F59E0B,stroke:#D97706,color:#fff + style CT fill:#E2E8F0,stroke:#94A3B8,color:#1E293B + style OT fill:#E2E8F0,stroke:#94A3B8,color:#1E293B + diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/02-customer-placed-order.png b/asciidoc/courses/importing-relational-to-graph/diagrams/02-customer-placed-order.png new file mode 100644 index 000000000..9642c8daf Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/diagrams/02-customer-placed-order.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/03-employee-processed-order.mmd b/asciidoc/courses/importing-relational-to-graph/diagrams/03-employee-processed-order.mmd new file mode 100644 index 000000000..4aab51b59 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/diagrams/03-employee-processed-order.mmd @@ -0,0 +1,19 @@ +%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#06B6D4', 'primaryTextColor': '#fff', 'lineColor': '#64748B'}}}%% +graph LR + subgraph "Graph Model" + E((Employee)) + O((Order)) + E -->|PROCESSED| O + end + + subgraph "Relational Model" + ET[employees tableemployee_id PK] + OT[orders tableorder_id PKemployee_id FK] + ET -.->|referenced by| OT + end + + style E fill:#06B6D4,stroke:#0891B2,color:#fff + style O fill:#F59E0B,stroke:#D97706,color:#fff + style ET fill:#E2E8F0,stroke:#94A3B8,color:#1E293B + style OT fill:#E2E8F0,stroke:#94A3B8,color:#1E293B + diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/03-employee-processed-order.png b/asciidoc/courses/importing-relational-to-graph/diagrams/03-employee-processed-order.png new file mode 100644 index 000000000..e57997967 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/diagrams/03-employee-processed-order.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/04-order-shipped-by-shipper.mmd b/asciidoc/courses/importing-relational-to-graph/diagrams/04-order-shipped-by-shipper.mmd new file mode 100644 index 000000000..3227a1275 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/diagrams/04-order-shipped-by-shipper.mmd @@ -0,0 +1,19 @@ +%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#F59E0B', 'primaryTextColor': '#fff', 'lineColor': '#64748B'}}}%% +graph LR + subgraph "Graph Model" + O((Order)) + S((Shipper)) + O -->|SHIPPED_BY| S + end + + subgraph "Relational Model" + OT[orders tableorder_id PKship_via FK] + ST[shippers tableshipper_id PK] + OT -.->|references| ST + end + + style O fill:#F59E0B,stroke:#D97706,color:#fff + style S fill:#F97316,stroke:#EA580C,color:#fff + style OT fill:#E2E8F0,stroke:#94A3B8,color:#1E293B + style ST fill:#E2E8F0,stroke:#94A3B8,color:#1E293B + diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/04-order-shipped-by-shipper.png b/asciidoc/courses/importing-relational-to-graph/diagrams/04-order-shipped-by-shipper.png new file mode 100644 index 000000000..542c946d0 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/diagrams/04-order-shipped-by-shipper.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/05-order-contains-product.mmd b/asciidoc/courses/importing-relational-to-graph/diagrams/05-order-contains-product.mmd new file mode 100644 index 000000000..f22b86800 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/diagrams/05-order-contains-product.mmd @@ -0,0 +1,22 @@ +%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#F59E0B', 'primaryTextColor': '#fff', 'lineColor': '#64748B'}}}%% +graph LR + subgraph "Graph Model" + O((Order)) + P((Product)) + O -->|"CONTAINS{quantity, unitPrice, discount}"| P + end + + subgraph "Relational Model - Junction Table" + OT[orders tableorder_id PK] + ODT[order_details tableorder_id FKproduct_id FKquantityunit_pricediscount] + PT[products tableproduct_id PK] + OT -.->|referenced by| ODT + PT -.->|referenced by| ODT + end + + style O fill:#F59E0B,stroke:#D97706,color:#fff + style P fill:#10B981,stroke:#059669,color:#fff + style OT fill:#E2E8F0,stroke:#94A3B8,color:#1E293B + style ODT fill:#FEF3C7,stroke:#F59E0B,color:#1E293B + style PT fill:#E2E8F0,stroke:#94A3B8,color:#1E293B + diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/05-order-contains-product.png b/asciidoc/courses/importing-relational-to-graph/diagrams/05-order-contains-product.png new file mode 100644 index 000000000..ad9009ea0 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/diagrams/05-order-contains-product.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/06-product-in-category.mmd b/asciidoc/courses/importing-relational-to-graph/diagrams/06-product-in-category.mmd new file mode 100644 index 000000000..5c6cd331f --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/diagrams/06-product-in-category.mmd @@ -0,0 +1,19 @@ +%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#10B981', 'primaryTextColor': '#fff', 'lineColor': '#64748B'}}}%% +graph LR + subgraph "Graph Model" + P((Product)) + C((Category)) + P -->|IN_CATEGORY| C + end + + subgraph "Relational Model" + PT[products tableproduct_id PKcategory_id FK] + CT[categories tablecategory_id PK] + PT -.->|references| CT + end + + style P fill:#10B981,stroke:#059669,color:#fff + style C fill:#8B5CF6,stroke:#7C3AED,color:#fff + style PT fill:#E2E8F0,stroke:#94A3B8,color:#1E293B + style CT fill:#E2E8F0,stroke:#94A3B8,color:#1E293B + diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/06-product-in-category.png b/asciidoc/courses/importing-relational-to-graph/diagrams/06-product-in-category.png new file mode 100644 index 000000000..814cf1745 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/diagrams/06-product-in-category.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/07-supplier-supplies-product.mmd b/asciidoc/courses/importing-relational-to-graph/diagrams/07-supplier-supplies-product.mmd new file mode 100644 index 000000000..e3e4ae9ed --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/diagrams/07-supplier-supplies-product.mmd @@ -0,0 +1,19 @@ +%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#EC4899', 'primaryTextColor': '#fff', 'lineColor': '#64748B'}}}%% +graph LR + subgraph "Graph Model" + S((Supplier)) + P((Product)) + S -->|SUPPLIES| P + end + + subgraph "Relational Model" + ST[suppliers tablesupplier_id PK] + PT[products tableproduct_id PKsupplier_id FK] + ST -.->|referenced by| PT + end + + style S fill:#EC4899,stroke:#DB2777,color:#fff + style P fill:#10B981,stroke:#059669,color:#fff + style ST fill:#E2E8F0,stroke:#94A3B8,color:#1E293B + style PT fill:#E2E8F0,stroke:#94A3B8,color:#1E293B + diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/07-supplier-supplies-product.png b/asciidoc/courses/importing-relational-to-graph/diagrams/07-supplier-supplies-product.png new file mode 100644 index 000000000..8e7a036e7 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/diagrams/07-supplier-supplies-product.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/08-employee-reports-to.mmd b/asciidoc/courses/importing-relational-to-graph/diagrams/08-employee-reports-to.mmd new file mode 100644 index 000000000..7392cd41e --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/diagrams/08-employee-reports-to.mmd @@ -0,0 +1,23 @@ +%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#06B6D4', 'primaryTextColor': '#fff', 'lineColor': '#64748B'}}}%% +graph TB + subgraph "Graph Model - Employee Hierarchy" + E1((EmployeeCEO)) + E2((EmployeeManager)) + E3((EmployeeStaff)) + E4((EmployeeStaff)) + + E2 -->|REPORTS_TO| E1 + E3 -->|REPORTS_TO| E2 + E4 -->|REPORTS_TO| E2 + end + + subgraph "Relational Model - Self-Reference" + ET[employees tableemployee_id PKreports_to FK → employee_id] + end + + style E1 fill:#06B6D4,stroke:#0891B2,color:#fff + style E2 fill:#06B6D4,stroke:#0891B2,color:#fff + style E3 fill:#06B6D4,stroke:#0891B2,color:#fff + style E4 fill:#06B6D4,stroke:#0891B2,color:#fff + style ET fill:#E2E8F0,stroke:#94A3B8,color:#1E293B + diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/08-employee-reports-to.png b/asciidoc/courses/importing-relational-to-graph/diagrams/08-employee-reports-to.png new file mode 100644 index 000000000..f73cff403 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/diagrams/08-employee-reports-to.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/09-complete-northwind-model.mmd b/asciidoc/courses/importing-relational-to-graph/diagrams/09-complete-northwind-model.mmd new file mode 100644 index 000000000..c97bd7835 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/diagrams/09-complete-northwind-model.mmd @@ -0,0 +1,28 @@ +%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#4C8EDA', 'primaryTextColor': '#fff', 'lineColor': '#64748B', 'fontSize': '14px'}}}%% +graph TB + subgraph "Complete Northwind Graph Model" + C((Customer)) + O((Order)) + P((Product)) + Cat((Category)) + S((Supplier)) + E((Employee)) + Sh((Shipper)) + + C -->|PLACED| O + E -->|PROCESSED| O + O -->|SHIPPED_BY| Sh + O -->|"CONTAINS{qty, price, discount}"| P + P -->|IN_CATEGORY| Cat + S -->|SUPPLIES| P + E -->|REPORTS_TO| E + end + + style C fill:#4C8EDA,stroke:#2563EB,color:#fff + style O fill:#F59E0B,stroke:#D97706,color:#fff + style P fill:#10B981,stroke:#059669,color:#fff + style Cat fill:#8B5CF6,stroke:#7C3AED,color:#fff + style S fill:#EC4899,stroke:#DB2777,color:#fff + style E fill:#06B6D4,stroke:#0891B2,color:#fff + style Sh fill:#F97316,stroke:#EA580C,color:#fff + diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/09-complete-northwind-model.png b/asciidoc/courses/importing-relational-to-graph/diagrams/09-complete-northwind-model.png new file mode 100644 index 000000000..bc0ce68d1 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/diagrams/09-complete-northwind-model.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/10-northwind-history.mmd b/asciidoc/courses/importing-relational-to-graph/diagrams/10-northwind-history.mmd new file mode 100644 index 000000000..d7d944f63 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/diagrams/10-northwind-history.mmd @@ -0,0 +1,37 @@ +%%{init: { + 'theme': 'base', + 'themeVariables': { + 'fontFamily': 'system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, sans-serif', + 'fontSize': '14px' + } +}}%% +flowchart LR + subgraph s1[" "] + A1["1990s1992: Microsoft createsNorthwind as sampledatabase for Access"] + end + + subgraph s2[" "] + A2["2000sPorted to SQL ServerMySQL & PostgreSQLStandard teaching tool"] + end + + subgraph s3[" "] + A3["2010sCountless tutorialsCertification examsNoSQL migrations"] + end + + subgraph s4[" "] + A4["TodayGraph migrationsNeo4j resourceGo-to dataset"] + end + + s1 ~~~ s2 + s2 ~~~ s3 + s3 ~~~ s4 + + style s1 fill:transparent,stroke:transparent + style s2 fill:transparent,stroke:transparent + style s3 fill:transparent,stroke:transparent + style s4 fill:transparent,stroke:transparent + + style A1 fill:#3B82F6,stroke:#1D4ED8,stroke-width:1px,color:#FFFFFF + style A2 fill:#10B981,stroke:#059669,stroke-width:1px,color:#FFFFFF + style A3 fill:#8B5CF6,stroke:#7C3AED,stroke-width:1px,color:#FFFFFF + style A4 fill:#F59E0B,stroke:#D97706,stroke-width:1px,color:#FFFFFF diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/10-northwind-history.png b/asciidoc/courses/importing-relational-to-graph/diagrams/10-northwind-history.png new file mode 100644 index 000000000..8c623a1fe Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/diagrams/10-northwind-history.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/11-relational-model.mmd b/asciidoc/courses/importing-relational-to-graph/diagrams/11-relational-model.mmd new file mode 100644 index 000000000..0f7925918 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/diagrams/11-relational-model.mmd @@ -0,0 +1,26 @@ +%%{init: { + 'theme': 'base', + 'themeVariables': { + 'fontFamily': 'system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, sans-serif', + 'fontSize': '14px', + 'primaryColor': '#DBEAFE', + 'primaryBorderColor': '#3B82F6' + } +}}%% +flowchart TB + C["CustomersCustomerID | CompanyName | City"] + O["OrdersOrderID | CustomerID | OrderDate"] + OD["OrderDetailsOrderID | ProductID | Quantity | UnitPrice"] + P["ProductsProductID | ProductName | CategoryID"] + Cat["CategoriesCategoryID | CategoryName"] + + C -->|"FK: customer_id"| O + O -->|"FK: order_id"| OD + P -->|"FK: product_id"| OD + P -->|"FK: category_id"| Cat + + style C fill:#DBEAFE,stroke:#3B82F6,stroke-width:2px,color:#1E293B + style O fill:#DBEAFE,stroke:#3B82F6,stroke-width:2px,color:#1E293B + style OD fill:#DBEAFE,stroke:#3B82F6,stroke-width:2px,color:#1E293B + style P fill:#DBEAFE,stroke:#3B82F6,stroke-width:2px,color:#1E293B + style Cat fill:#DBEAFE,stroke:#3B82F6,stroke-width:2px,color:#1E293B diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/11-relational-model.png b/asciidoc/courses/importing-relational-to-graph/diagrams/11-relational-model.png new file mode 100644 index 000000000..42690fece Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/diagrams/11-relational-model.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/12-graph-model.mmd b/asciidoc/courses/importing-relational-to-graph/diagrams/12-graph-model.mmd new file mode 100644 index 000000000..35ec48c98 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/diagrams/12-graph-model.mmd @@ -0,0 +1,25 @@ +%%{init: { + 'theme': 'base', + 'themeVariables': { + 'fontFamily': 'system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, sans-serif', + 'fontSize': '14px' + } +}}%% +flowchart LR + C(("CustomerAlfredsBerlin")) + O(("Order2024-01-15")) + P1(("ProductChai")) + P2(("ProductChang")) + Cat(("CategoryBeverages")) + + C -->|PLACED| O + O -->|"CONTAINSqty: 10"| P1 + O -->|"CONTAINSqty: 5"| P2 + P1 -->|IN_CATEGORY| Cat + P2 -->|IN_CATEGORY| Cat + + style C fill:#F59E0B,stroke:#D97706,stroke-width:2px,color:#FFFFFF + style O fill:#F59E0B,stroke:#D97706,stroke-width:2px,color:#FFFFFF + style P1 fill:#F59E0B,stroke:#D97706,stroke-width:2px,color:#FFFFFF + style P2 fill:#F59E0B,stroke:#D97706,stroke-width:2px,color:#FFFFFF + style Cat fill:#F59E0B,stroke:#D97706,stroke-width:2px,color:#FFFFFF diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/12-graph-model.png b/asciidoc/courses/importing-relational-to-graph/diagrams/12-graph-model.png new file mode 100644 index 000000000..4cc9e906f Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/diagrams/12-graph-model.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/diagrams/README.md b/asciidoc/courses/importing-relational-to-graph/diagrams/README.md new file mode 100644 index 000000000..ae5ea6457 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/diagrams/README.md @@ -0,0 +1,139 @@ +# Diagrams and Screenshots Needed for the Course + +This document lists all locations where screenshots or diagrams are needed, organized by type. + +--- + +## PART 1: SCREENSHOTS NEEDED (Manual Capture Required) + +These require actual screenshots from the software interfaces: + +### Module 1: Foundation + +#### Lesson 2: Prerequisites +| Location | Description | Suggested Filename | +|----------|-------------|-------------------| +| Line 226 | Data Importer initial screen | `data-importer-initial.png` | +| Line 235 | Add Data Source dialog | `add-data-source-dialog.png` | +| Line 301 | Table list in Data Importer | `data-importer-tables.png` | + +### Module 2: Modelling + +#### Lesson 1: Connecting to PostgreSQL +| Location | Description | Suggested Filename | +|----------|-------------|-------------------| +| Line 102 | Query results in Postico/pgAdmin | `query-results.png` | +| Line 117 | Customers table columns | `customers-columns.png` | +| Line 141 | Record counts | `record-counts.png` | +| Line 166 | Foreign key relationships | `foreign-keys.png` | +| Line 226 | Customer data | `customer-data.png` | +| Line 249 | Joined order data | `joined-order-data.png` | + +#### Lesson 5: Planning Validation +| Location | Description | Suggested Filename | +|----------|-------------|-------------------| +| Line 307 | SHOW CONSTRAINTS output | `show-constraints.png` | +| Line 309 | SHOW INDEXES output | `show-indexes.png` | + +#### Lesson 6: Modelling Workshop (Arrows.app) +| Location | Description | Suggested Filename | +|----------|-------------|-------------------| +| Line 34 | Arrows.app blank canvas | `arrows-blank.png` | +| Line 42 | Node creation | `arrows-create-node.png` | +| Line 67 | Arranged nodes | `arrows-arranged-nodes.png` | +| Line 89 | Customer node with properties | `arrows-customer-properties.png` | +| Line 148 | PLACED relationship | `arrows-placed-relationship.png` | +| Line 166 | Relationship with properties | `arrows-relationship-properties.png` | +| Line 179 | Self-referencing relationship | `arrows-self-reference.png` | +| Line 186 | Complete Arrows.app model | `arrows-complete-model.png` | +| Line 209 | Export menu | `arrows-export.png` | + +**Total Screenshots Needed: 20** + +--- + +## PART 2: MERMAID DIAGRAMS (Generated) + +These conceptual diagrams have been generated as PNG files in this directory: + +| # | Diagram | Purpose | Target Location | PNG File | +|---|---------|---------|-----------------|----------| +| 1 | Node Labels Overview | Shows all 7 node labels derived from Northwind tables | `lessons/2-analysing-schema/lesson.adoc` Line 320 | `01-node-labels.png` | +| 2 | Customer-PLACED-Order | Shows the PLACED relationship mapping | `lessons/3-identifying-nodes/lesson.adoc` Line 140 | `02-customer-placed-order.png` | +| 3 | Employee-PROCESSED-Order | Shows the PROCESSED relationship mapping | `lessons/3-identifying-nodes/lesson.adoc` Line 156 | `03-employee-processed-order.png` | +| 4 | Order-SHIPPED_BY-Shipper | Shows the SHIPPED_BY relationship mapping | `lessons/3-identifying-nodes/lesson.adoc` Line 170 | `04-order-shipped-by-shipper.png` | +| 5 | Order-CONTAINS-Product | Shows junction table becoming relationship with properties | `lessons/3-identifying-nodes/lesson.adoc` Line 188 | `05-order-contains-product.png` | +| 6 | Product-IN_CATEGORY-Category | Shows the IN_CATEGORY relationship mapping | `lessons/3-identifying-nodes/lesson.adoc` Line 202 | `06-product-in-category.png` | +| 7 | Supplier-SUPPLIES-Product | Shows the SUPPLIES relationship mapping | `lessons/3-identifying-nodes/lesson.adoc` Line 218 | `07-supplier-supplies-product.png` | +| 8 | Employee-REPORTS_TO-Employee | Shows self-referencing relationship for hierarchy | `lessons/3-identifying-nodes/lesson.adoc` Line 234 | `08-employee-reports-to.png` | +| 9 | Complete Northwind Model | Shows all nodes and relationships together | `lessons/3-identifying-nodes/lesson.adoc` Line 275 | `09-complete-northwind-model.png` | + +**Total Diagrams Generated: 9** + +--- + +## SUMMARY FOR REVIEW + +### Diagram 1: Node Labels Overview (`01-node-labels.png`) +Shows the transformation from 7 Northwind relational tables to 7 graph node labels: +- customers → Customer +- orders → Order +- products → Product +- categories → Category +- suppliers → Supplier +- employees → Employee +- shippers → Shipper + +### Diagram 2: Customer-PLACED-Order (`02-customer-placed-order.png`) +Shows how the foreign key `orders.customer_id → customers.customer_id` becomes the `(Customer)-[:PLACED]->(Order)` relationship. + +### Diagram 3: Employee-PROCESSED-Order (`03-employee-processed-order.png`) +Shows how the foreign key `orders.employee_id → employees.employee_id` becomes the `(Employee)-[:PROCESSED]->(Order)` relationship. + +### Diagram 4: Order-SHIPPED_BY-Shipper (`04-order-shipped-by-shipper.png`) +Shows how the foreign key `orders.ship_via → shippers.shipper_id` becomes the `(Order)-[:SHIPPED_BY]->(Shipper)` relationship. + +### Diagram 5: Order-CONTAINS-Product (`05-order-contains-product.png`) +Shows how the junction table `order_details` (with order_id, product_id, quantity, unit_price, discount) becomes the `(Order)-[:CONTAINS {quantity, unitPrice, discount}]->(Product)` relationship with properties. + +### Diagram 6: Product-IN_CATEGORY-Category (`06-product-in-category.png`) +Shows how the foreign key `products.category_id → categories.category_id` becomes the `(Product)-[:IN_CATEGORY]->(Category)` relationship. + +### Diagram 7: Supplier-SUPPLIES-Product (`07-supplier-supplies-product.png`) +Shows how the foreign key `products.supplier_id → suppliers.supplier_id` becomes the `(Supplier)-[:SUPPLIES]->(Product)` relationship. + +### Diagram 8: Employee-REPORTS_TO-Employee (`08-employee-reports-to.png`) +Shows how the self-referencing foreign key `employees.reports_to → employees.employee_id` becomes the `(Employee)-[:REPORTS_TO]->(Employee)` relationship, creating the management hierarchy. + +### Diagram 9: Complete Northwind Model (`09-complete-northwind-model.png`) +Shows the complete graph model with all 7 node labels and all 7 relationship types: +- Customer -PLACED-> Order +- Employee -PROCESSED-> Order +- Order -SHIPPED_BY-> Shipper +- Order -CONTAINS-> Product (with properties) +- Product -IN_CATEGORY-> Category +- Supplier -SUPPLIES-> Product +- Employee -REPORTS_TO-> Employee + +--- + +## TO COPY DIAGRAMS TO LESSON FOLDERS + +After reviewing, copy the PNG files to the appropriate lesson image folders: + +```bash +# Node labels diagram +cp 01-node-labels.png ../modules/2-modelling/lessons/2-analysing-schema/images/node-labels.png + +# Relationship diagrams +cp 02-customer-placed-order.png ../modules/2-modelling/lessons/3-identifying-nodes/images/customer-placed-order.png +cp 03-employee-processed-order.png ../modules/2-modelling/lessons/3-identifying-nodes/images/employee-processed-order.png +cp 04-order-shipped-by-shipper.png ../modules/2-modelling/lessons/3-identifying-nodes/images/order-shipped-by-shipper.png +cp 05-order-contains-product.png ../modules/2-modelling/lessons/3-identifying-nodes/images/order-contains-product.png +cp 06-product-in-category.png ../modules/2-modelling/lessons/3-identifying-nodes/images/product-in-category.png +cp 07-supplier-supplies-product.png ../modules/2-modelling/lessons/3-identifying-nodes/images/supplier-supplies-product.png +cp 08-employee-reports-to.png ../modules/2-modelling/lessons/3-identifying-nodes/images/employee-reports-to.png +cp 09-complete-northwind-model.png ../modules/2-modelling/lessons/3-identifying-nodes/images/complete-northwind-model.png +``` + +Then update the lesson files to replace the `// TODO` comments with the actual image references. diff --git a/asciidoc/courses/importing-relational-to-graph/illustration.svg b/asciidoc/courses/importing-relational-to-graph/illustration.svg new file mode 100644 index 000000000..fa7aa202d --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/illustration.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/images/graph-model.png b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/images/graph-model.png new file mode 100644 index 000000000..4cc9e906f Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/images/graph-model.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/images/lesson-diagram-1.png b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/images/lesson-diagram-1.png new file mode 100644 index 000000000..54c93d7c7 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/images/lesson-diagram-1.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/images/lesson-diagram-1.svg b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/images/lesson-diagram-1.svg new file mode 100644 index 000000000..bb1b170c2 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/images/lesson-diagram-1.svg @@ -0,0 +1 @@ +Graph ModelPLACEDCONTAINSquantity: 10CONTAINSquantity: 5BELONGS_TOBELONGS_TOCustomercompanyName: 'Alfreds'city: 'Berlin'OrderorderDate: '2024-01-15'shipCity: 'Berlin'ProductproductName: 'Chai'unitPrice: 18.00ProductproductName: 'Chang'unitPrice: 19.00CategorycategoryName: 'Beverages'Relational ModelFK: customer_idFK: order_idFK: product_idCustomers tableCustomerID | CompanyName | CityOrders tableOrderID | CustomerID | OrderDateOrderDetails tableOrderID | ProductID | Quantity | UnitPriceProducts tableProductID | ProductName | CategoryID \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/images/northwind-history.png b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/images/northwind-history.png new file mode 100644 index 000000000..8c623a1fe Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/images/northwind-history.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/images/relational-model.png b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/images/relational-model.png new file mode 100644 index 000000000..42690fece Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/images/relational-model.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/lesson.adoc b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/lesson.adoc new file mode 100644 index 000000000..1dad52cc1 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/lesson.adoc @@ -0,0 +1,316 @@ += Comparing relational and graph data +:order: 1 +:type: lesson + +Welcome to "Importing Relational Data to Neo4j"! + +In this course, you will learn how to migrate data from relational databases into Neo4j. You will explore the differences between relational and graph data models, and learn practical techniques for transforming and importing relational data into Neo4j. + +== What you will learn + +In this course, you will: + +. Understand the differences between relational and graph data models +. Learn how to analyze relational database schemas and identify entities, relationships, and properties +. Discover techniques for mapping relational tables to graph nodes and relationships +. Use tools and methods to extract data from relational databases +. Import relational data into Neo4j using various approaches +. Validate and query your imported graph data + +== Course dataset: Northwind + +Throughout this course, you will work with the **Northwind** database, a classic relational database sample that represents a company selling food products. + + +=== A brief history of Northwind + +image::images/northwind-history.png[Timeline showing the history of Northwind database from 1992 to today,width=900,align=center] + +The Northwind database was originally created by Microsoft in the 1990s as a sample database for Microsoft Access. It was designed to demonstrate relational database concepts and has since become one of the most widely used educational datasets in the database community. + +The database models a fictional company called "Northwind Traders" that imports and exports specialty foods. It includes realistic business data: customers placing orders, employees processing those orders, products organized into categories, and suppliers providing inventory. + +Over the decades, Northwind has been ported to virtually every relational database system - SQL Server, MySQL, PostgreSQL, Oracle, and others. It appears in countless database textbooks, tutorials, and certification exams. + +=== What the Northwind database contains + +The Northwind database includes data about: + +* **Customers** - Companies that purchase products +* **Orders** - Purchase transactions with dates and shipping information +* **Products** - Items available for sale with pricing +* **Categories** - Product groupings (Beverages, Condiments, Seafood, etc.) +* **Suppliers** - Companies that provide products +* **Employees** - Staff members who process orders +* **Shippers** - Delivery companies + +You can download the SQL script for the Northwind dataset from: link:https://github.com/pthom/northwind_psql[Northwind SQL script^] + +If you are ready to import the data into Neo4j, this repository contains the CSV files: link:https://github.com/neo4j-graph-examples/northwind/tree/main/imported[Northwind CSV files^] + +In this course, you will: + +* Analyze the Northwind relational schema +* Design an equivalent graph data model +* Extract data from the Northwind database +* Transform and import the data into Neo4j +* Query the graph to answer business questions + +== Understanding relational vs graph data models + +Before importing relational data into Neo4j, it helps to understand how these two data models differ. This understanding will guide your migration strategy and help you design a graph data model that actually makes sense for your use case. + +== Relational data model + +image::images/relational-model.png[Relational data model showing tables connected by foreign keys,width=700,align=center] + +Relational databases organize data into **tables** (also called relations), where each table contains **rows** (records) and **columns** (attributes). Relationships between tables are established through **foreign keys**, which reference primary keys in other tables. + +Characteristics of relational databases: + +* **Tabular structure** - Data is organized in rows and columns +* **Normalization** - Data is split across multiple tables to reduce redundancy +* **Foreign key relationships** - Tables are connected through key references +* **Schema rigidity** - Tables must be defined before data can be inserted +* **JOIN operations** - Relationships are discovered through SQL JOIN queries + +=== Example relational schema + +In this course, you will work with the **Northwind** database, a classic sample relational database that represents a company selling food products. The Northwind database includes tables such as: + +* `Customers` table: `CustomerID`, `CompanyName`, `ContactName`, `City`, `Country` +* `Orders` table: `OrderID`, `CustomerID`, `EmployeeID`, `OrderDate`, `ShipCity` +* `OrderDetails` table: `OrderID`, `ProductID`, `Quantity`, `UnitPrice`, `Discount` +* `Products` table: `ProductID`, `ProductName`, `CategoryID`, `SupplierID`, `UnitPrice` +* `Categories` table: `CategoryID`, `CategoryName`, `Description` +* `Suppliers` table: `SupplierID`, `CompanyName`, `ContactName`, `City`, `Country` +* `Employees` table: `EmployeeID`, `FirstName`, `LastName`, `Title`, `ReportsTo` + +The relationships are implicit through foreign keys: +* `Orders.CustomerID` references `Customers.CustomerID` +* `Orders.EmployeeID` references `Employees.EmployeeID` +* `OrderDetails.OrderID` references `Orders.OrderID` +* `OrderDetails.ProductID` references `Products.ProductID` +* `Products.CategoryID` references `Categories.CategoryID` +* `Products.SupplierID` references `Suppliers.SupplierID` + + +== Graph data model + +image::images/graph-model.png[Graph data model showing nodes connected by relationships,width=800,align=center] + +Graph databases organize data as **nodes** (entities) and **relationships** (connections between entities). Both nodes and relationships can have **properties** (key-value pairs) that store data. + +Characteristics of graph databases: + +* **Explicit relationships** - Relationships are first-class citizens, stored directly in the database +* **Flexible schema** - Schema is optional and can evolve as you add data +* **Traversal-based queries** - Relationships are navigated directly, not computed through JOINs +* **Natural representation** - Data structures mirror real-world relationships +* **Performance** - Relationship traversal is constant time O(1), regardless of graph size. + +=== Example graph model + +The equivalent Northwind data in a graph would have: + +* `Customer` nodes with properties: `companyName`, `contactName`, `city`, `country` +* `Order` nodes with properties: `orderDate`, `shipCity` +* `Product` nodes with properties: `productName`, `unitPrice` +* `Category` nodes with properties: `categoryName`, `description` +* `Supplier` nodes with properties: `companyName`, `contactName`, `city`, `country` +* `Employee` nodes with properties: `firstName`, `lastName`, `title` +* `PLACED` relationships from `Customer` to `Order` +* `CONTAINS` relationships from `Order` to `Product` with properties: `quantity`, `unitPrice`, `discount` +* `BELONGS_TO` relationships from `Product` to `Category` +* `SUPPLIES` relationships from `Supplier` to `Product` +* `SOLD` relationships from `Employee` to `Order` +* `REPORTS_TO` relationships from `Employee` to `Employee` (for the management hierarchy) + + +== Main differences + +=== Structural differences + +**Relational Model:** + +[cols="1,1"] +|=== +| Data is stored in separate tables +| Relationships are implicit (foreign keys) +| Requires JOIN operations to traverse relationships +| Schema must be defined upfront +| Normalized structure reduces redundancy but increases query complexity +|=== + +**Graph Model:** + +[cols="1,1"] +|=== +| Data is stored as connected nodes +| Relationships are explicit and stored directly +| Relationships are traversed directly (no JOINs needed) +| Schema is optional and flexible +| Natural representation of connected data +|=== + +=== Query differences + +**Relational queries** require JOIN operations to connect related data: + +[source,sql] +---- +SELECT c.CompanyName, o.OrderDate, p.ProductName, od.Quantity, od.UnitPrice +FROM Customers c +JOIN Orders o ON c.CustomerID = o.CustomerID +JOIN OrderDetails od ON o.OrderID = od.OrderID +JOIN Products p ON od.ProductID = p.ProductID +WHERE c.CustomerID = 'ALFKI'; +---- + +**Graph queries** traverse relationships directly: + +[source,cypher] +---- +MATCH (c:Customer)-[:PLACED]->(o:Order)-[r:CONTAINS]->(p:Product) +WHERE c.customerID = 'ALFKI' +RETURN c.companyName, o.orderDate, p.productName, r.quantity, r.unitPrice +---- + +=== Performance implications + +* **Relational databases**: JOIN performance degrades as the number of tables and data volume increases. Complex queries with multiple JOINs can become slow. +* **Graph databases**: Relationship traversal is constant time O(1). This means following a relationship takes the same amount of time whether you have 1,000 nodes or 1 billion nodes - a property that has significant implications for query performance at scale. + +== When to use each model + +=== Use relational databases when: + +* Data is primarily structured and tabular +* Relationships are simple and well-defined +* You need ACID transactions across multiple tables +* Your queries primarily aggregate data +* Your data model is stable and unlikely to change + +=== Use graph databases when: + +* Relationships between entities are complex and important +* You need to traverse relationships frequently +* Your data model represents a network or connected structure +* You need to find patterns in relationships +* Your schema needs to evolve over time +* You're working with recommendation systems, fraud detection, or social networks + +== Migration considerations + +When migrating from relational to graph databases, consider: + +* **Not all relational data needs to be a graph** - Some data may be better suited to remain in relational format +* **Transform, do not translate** - Do not simply recreate tables as nodes; design a graph model that serves your use case +* **Relationships are explicit** - Foreign keys become first-class relationships with properties +* **Denormalization is acceptable** - Unlike relational databases, some data duplication in graphs can improve query performance +* **Schema flexibility** - You can evolve your graph model as requirements change + + +=== How relational concepts map to graph concepts + +The following table shows how the concepts map: + +[cols="1,1"] +|=== +| Relational | Graph + +| Entity table (e.g., `customers`) +| Node label (e.g., `Customer`) + +| Row/record +| Individual node instance + +| Column/attribute +| Property on a node + +| Foreign key column +| Relationship to another node + +| Junction table +| Relationship (often with properties) + +|=== + +[TIP] +.Bookmark this reference +==== +Bookmark this mapping table. It serves as a quick reference when analyzing any relational schema for graph migration. These are the two most common sources of confusion when designing graph models from relational schemas. +==== + + +== Common Misconceptions + +When learning about relational-to-graph migration, several misconceptions can lead to poor data models: + +[IMPORTANT] +.Misconception 1: "Every table becomes a node" +==== +**Wrong:** Automatically converting every SQL table to a graph node. + +**Reality:** +*Entity tables (customers, products, orders) → Nodes +*Junction tables (order_details) → Relationships with properties +*Lookup tables (status codes) → Often become properties, not nodes +*Audit tables → May not belong in the graph at all +==== + +[IMPORTANT] +.Misconception 2: "Rows become nodes, columns become relationships" +==== +**Wrong:** Thinking columns map to relationships. + +**Reality:** +*Rows → Individual node instances +*Columns → Properties on nodes +*Foreign key columns → Relationships to other nodes +*Junction tables → Relationships with properties +*Lookup tables → Often become properties, not nodes +*Audit tables → May not belong in the graph at all +==== + +[IMPORTANT] +.Misconception 3: "The graph should mirror the relational schema" +==== +**Wrong:** Creating a 1:1 copy of the relational structure. + +**Reality:** The graph model should be designed for your query patterns and use cases, not to replicate the source schema. A good graph model often looks quite different from the source relational model. +==== + +[IMPORTANT] +.Misconception 4: "All data must be migrated" +==== +**Wrong:** Assuming every piece of relational data needs to be in the graph. + +**Reality:** Only migrate data that benefits from graph representation. Some data (logs, archives, simple lookups) may be better left in relational storage or omitted entirely. +==== + +[IMPORTANT] +.Design for your use case, not for schema replication +==== +The goal of migration is not to replicate your relational schema in a graph database, but to design a graph model that better represents your data and serves your project's objectives. +==== + + + +[.quiz] +== Check your understanding + +include::questions/1-differences.adoc[leveloffset=+1] + +[.summary] +== Summary + +In this lesson, you learned: + +* The fundamental differences between relational and graph data models +* How relational databases use tables, rows, and foreign keys to represent data and relationships +* How graph databases use nodes, relationships, and properties to explicitly represent connected data +* That graph databases excel at traversing relationships, while relational databases require JOIN operations +* The choice between models depends on your use case and data structure + +In the next lesson, you will learn about the prerequisites and tools needed for importing relational data into Neo4j. diff --git a/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/questions/1-differences.adoc b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/questions/1-differences.adoc new file mode 100644 index 000000000..10e0f39fc --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/1-comparing/questions/1-differences.adoc @@ -0,0 +1,26 @@ +[.question] += Understanding relational vs graph models + +Which of the following statements best describes a difference between relational and graph data models? + +* [ ] Relational databases store data in tables, while graph databases store data in documents +* [x] Relational databases use foreign keys to represent relationships implicitly, while graph databases store relationships explicitly as first-class citizens +* [ ] Graph databases require JOIN operations to traverse relationships, while relational databases traverse relationships directly +* [ ] Relational databases have flexible schemas, while graph databases require rigid schema definitions + +[TIP,role=hint] +.Hint +==== +Think about how relationships are represented and accessed in each model. Consider whether relationships are stored directly or need to be computed. +==== + +[TIP,role=solution] +.Solution +==== +**Relational databases use foreign keys to represent relationships implicitly, while graph databases store relationships explicitly as first-class citizens.** + +In relational databases, relationships between tables are represented through foreign key columns that reference primary keys in other tables. These relationships are implicit and require JOIN operations to traverse. + +In graph databases, relationships are stored directly as edges between nodes. They are first-class citizens with their own properties and can be traversed directly without JOIN operations, making relationship queries much faster. +==== + diff --git a/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/2-prerequisites/images/import-data-charts.svg b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/2-prerequisites/images/import-data-charts.svg new file mode 100644 index 000000000..a100fde48 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/2-prerequisites/images/import-data-charts.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/2-prerequisites/lesson.adoc b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/2-prerequisites/lesson.adoc new file mode 100644 index 000000000..53a933265 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/2-prerequisites/lesson.adoc @@ -0,0 +1,364 @@ += Prerequisites and tools +:order: 2 +:type: lesson + +In this lesson, you will explore the different approaches for importing data into Neo4j. + +You do not need to implement all of the tools and approaches described in this lesson. This is a comprehensive overview of the options available to you. + +Moving forward you will use the CSV files to import the data into Neo4j. + + + +== What you need + +To complete this course, you will need: + +* Access to a Neo4j database (AuraDB Professional, GraphAcademy Sandbox, or self-managed on-premises) +* Basic understanding of relational databases (tables, rows, columns, foreign keys) +* Basic understanding of graph databases (nodes, relationships, properties) +* Familiarity with SQL queries +* Basic knowledge of Cypher query language + +[NOTE] +.Prerequisites +==== +For those new to Neo4j or graph databases, completing these courses first is recommended: + +* link:https://graphacademy.neo4j.com/courses/neo4j-fundamentals/[Neo4j Fundamentals^] +* link:https://graphacademy.neo4j.com/courses/cypher-fundamentals/[Cypher Fundamentals^] +* link:https://graphacademy.neo4j.com/courses/modeling-fundamentals/[Graph Data Modeling Fundamentals^] +==== + +=== Neo4j Database + +You can complete this course using either a Neo4j Aura instance (cloud) or a self-managed Neo4j database. + + +==== Option A: Neo4j Aura (Recommended) + +Neo4j Aura is the fully managed cloud service. For this course, create an **AuraDB Professional** instance: + +* **No credit card required** - AuraDB Professional includes a free tier +* **Graph Data Science support** - Professional instances support GDS algorithms, which you may want to use after importing your data +* **Data Importer included** - The visual import tool is built into the Aura console + +To create an AuraDB Professional instance: + +. Go to link:https://console.neo4j.io[console.neo4j.io^] +. Sign in or create a Neo4j account +. Click **New Instance** +. Select **AuraDB Professional** +. Choose a region close to you +. Save your connection credentials securely + +[TIP] +.Why AuraDB Professional? +==== +AuraDB Professional provides access to Graph Data Science algorithms without requiring a credit card. After importing your data, you can run algorithms like PageRank, community detection, and pathfinding directly on your graph. +==== + + +==== Option B: GraphAcademy Sandbox (Quick Start) + +GraphAcademy provides a free Neo4j Sandbox for learning purposes. The sandbox is a temporary Neo4j instance that you can use to practice without any setup. + +To use the GraphAcademy Sandbox: + +. This course includes a sandbox that is automatically provisioned when you enroll +. Look for the **Sandbox** panel in the course interface (usually on the right side of lesson pages) +. Click **Open Sandbox** to launch Neo4j Browser connected to your sandbox instance +. Your sandbox credentials are displayed in the panel - use these if you need to connect external tools + +[NOTE] +.Sandbox limitations +==== +The GraphAcademy Sandbox is designed for learning and has some limitations: + +* **Temporary** - Sandboxes expire after a period of inactivity (typically 3 days) +* **Data persistence** - Data may be reset between sessions +* **No Data Importer UI** - You will use Cypher `LOAD CSV` commands instead of the visual Data Importer + +For a persistent database with the full Data Importer experience, use AuraDB Professional (Option A). +==== + +To connect to your sandbox from external tools: + +. Copy the **Bolt URL** from the Sandbox panel (format: `bolt://xxx.databases.neo4j.io:7687`) +. Use the provided **Username** (usually `neo4j`) +. Use the provided **Password** + +You can use these credentials with: + +* Neo4j Data Importer at `workspace.neo4j.io/workspace/import` - Connect using the Bolt URL +* Neo4j Desktop - Add a remote connection +* Neo4j drivers in your applications + + +==== Option C: Self-Managed Neo4j + +If you prefer to run Neo4j locally or on your own infrastructure: + +* Download Neo4j Desktop from `neo4j.com/download` +* Or use Docker: `docker run -p 7474:7474 -p 7687:7687 neo4j` + +Self-managed installations work well for this course. The Data Importer tool is available in Neo4j Desktop and can also be accessed at `workspace.neo4j.io/workspace/import`. + + +=== Northwind Dataset + +The Northwind database is a sample relational database that represents a fictional company's sales data. You will use this dataset throughout the course to practice importing relational data into Neo4j. + +There are two ways to access the Northwind data: + + +==== Option A: Ready-to-Import CSV Files (Recommended) + +The Northwind data has already been exported to CSV files and is available in the Neo4j GitHub repository, ready to import directly into Neo4j: + +Northwind CSV files on GitHub: `https://github.com/neo4j-graph-examples/northwind/tree/main/import` + +This is the fastest way to get started. You can: + +* Download the CSV files and upload them to the Neo4j Data Importer +* Use `LOAD CSV` in Cypher to import directly from the GitHub raw URLs +* Skip the PostgreSQL setup entirely if you just want to focus on the Neo4j import process + +[TIP] +.Quick start with CSV files +==== +If you want to skip the relational database exploration and jump straight to importing data into Neo4j, use the pre-exported CSV files. The import process is covered in Module 3. +==== + + +==== Option B: PostgreSQL Database (Optional - Full Experience) + +If you want the complete experience of extracting data from a relational database, you can set up PostgreSQL with the Northwind data. This is optional but recommended if you want to: + +* Explore the relational schema using SQL queries +* Practice exporting data from a relational database +* Understand the full migration workflow from source to target + +**PostgreSQL Installation:** + +Download and install from Postgres.app (macOS) or postgresql.org/download (Windows, Linux, macOS). + +**PostgreSQL Client Tools (Optional):** + +* **Postico** (macOS) - Search for "Postico" in the Mac App Store or visit eggerapps.at/postico2 +* **pgAdmin** (Windows, Linux, macOS) - Search for "pgAdmin download" or visit pgadmin.org +* **DBeaver** (Cross-platform) - Search for "DBeaver download" or visit dbeaver.io + +**Northwind SQL Script:** + +* Northwind SQL script: `https://raw.githubusercontent.com/pthom/northwind_psql/master/northwind.sql` +* GitHub repository with Docker setup: `https://github.com/pthom/northwind_psql` + + +===== Loading Northwind into PostgreSQL + +Using the command line: + +[source,bash] +---- +curl -O https://raw.githubusercontent.com/pthom/northwind_psql/master/northwind.sql +psql -U postgres -c "CREATE DATABASE northwind;" +psql -U postgres -d northwind -f northwind.sql +---- + +Or using a GUI tool (Postico, pgAdmin, DBeaver): + +. Create a new database named `northwind` +. Open the SQL query tool +. Load and execute the `northwind.sql` script +. Verify the data by browsing the tables + +[TIP] +.Test your database +==== +After loading the data, run these queries to verify: + +[source,sql] +---- +SELECT COUNT(*) FROM customers; -- Should return 91 +SELECT COUNT(*) FROM orders; -- Should return 830 +SELECT COUNT(*) FROM products; -- Should return 77 +---- +==== + + +== Connecting PostgreSQL to Neo4j Data Importer + +The Neo4j Data Importer can connect directly to PostgreSQL databases, allowing you to import data without manually exporting to CSV files. This section explains how to set up a PostgreSQL data source connection. + + +=== Step 1: Open the Data Importer + +. In Neo4j Aura, open your instance and click **Import** in the left sidebar +. For self-managed Neo4j, access the Data Importer at `workspace.neo4j.io/workspace/import` or through Neo4j Desktop + +// TODO: Add screenshot of Data Importer initial screen + + +=== Step 2: Add a Data Source + +. In the Data Importer, click on **Data Sources** in the left panel +. Click **Add Data Source** +. Select **PostgreSQL** from the list of available database types + +// TODO: Add screenshot of Add Data Source dialog + + +=== Step 3: Configure the PostgreSQL Connection + +Enter your PostgreSQL connection details: + +[cols="1,2"] +|=== +| Field | Value for Northwind + +| **Connection Name** +| `Northwind PostgreSQL` (or any descriptive name) + +| **Host** +| `localhost` (or your PostgreSQL server address) + +| **Port** +| `5432` (default PostgreSQL port) + +| **Database** +| `northwind` + +| **Username** +| `postgres` (or your PostgreSQL username) + +| **Password** +| Your PostgreSQL password + +|=== + +. Click **Test Connection** to verify the settings +. If the connection test succeeds, click **Save** + +[NOTE] +.Network access for Aura +==== +If you are using Neo4j Aura and your PostgreSQL database is running locally, you will need to make your PostgreSQL instance accessible from the internet. Options include: + +* Using a cloud-hosted PostgreSQL service (AWS RDS, Google Cloud SQL, Azure Database for PostgreSQL) +* Setting up a tunnel using ngrok or similar tools +* Deploying PostgreSQL to a server with a public IP address + +For learning purposes with Northwind, you may find it easier to export the data to CSV files and upload them directly to the Data Importer. +==== + + +=== Step 4: Browse Tables and Select Data + +Once connected, the Data Importer displays the available tables from your PostgreSQL database: + +. Expand the data source in the left panel to see the list of tables +. Click on a table name to preview its data +. Select the tables you want to import by dragging them onto the mapping canvas + +The available Northwind tables include: + +* `customers` +* `orders` +* `order_details` +* `products` +* `categories` +* `suppliers` +* `employees` +* `shippers` + +// TODO: Add screenshot of table list in Data Importer + + +=== Step 5: Map Tables to Nodes and Relationships + +After adding tables to the canvas: + +. Configure each table as a **Node** or use it to create **Relationships** +. Set the node labels and property mappings +. Define relationship types and connect nodes + +The subsequent modules in this course cover the mapping process in detail. + +[TIP] +.Alternative: CSV file upload +==== +If you cannot connect directly to PostgreSQL, you can export tables to CSV files and upload them to the Data Importer: + +. In PostgreSQL, export each table using: ++ +[source,sql] +---- +COPY customers TO '/path/to/customers.csv' WITH CSV HEADER; +COPY orders TO '/path/to/orders.csv' WITH CSV HEADER; +-- Repeat for other tables +---- + +. In the Data Importer, click **Files** and upload your CSV files +. The mapping process is the same regardless of whether data comes from a database connection or CSV files +==== + + +== Approaches for Importing Data + +Importing data refers to the process of moving data from one system into Neo4j. +The import could be a one-time operation, or it could be a regular process that needs to be automated. + +Typically, the source system would have a different data model than Neo4j, and by importing data, you would transform the data into a graph model. + +The source may expose data in different ways, for example: + +* Relational Database Management Systems (RDBMS) +* Web APIs +* Public data directories +* BI tools +* Excel +* Flat files (CSV, JSON, XML) + +The method by which you import data into Neo4j will depend on several factors, including: + +* The source of the data +* The volume of data +* The frequency of the import +* The complexity of the data model +* The transformation required + +The options available are numerous, and include: + +* One-off batch import of all data +* One-off load with a regular update +* Continuous import of data +* Real-time application updates +* ETL (Extract, Transform, Load) pipelines + +Ultimately, how you import data into Neo4j will depend on your specific requirements. + +== Options for Importing Data + +The Neo4j field team has identified the most common ways data is imported into Neo4j. +The following flowchart shows potential options and tools. + +image::images/import-data-charts.svg[A flowchart showing numerous paths and options for importing data into Neo4j. The flowchart lists import tools such as neosemantics, Neo4j admin-import, Custom apps, ETL tools, and more.] + +This flowchart is not an exhaustive list or a decision-making tool. + +It is a conversation starter, a way to understand some options, decision points, and tools available. + +In the next lesson, you will look at some of the tools available for importing data into Neo4j. + +[.quiz] +== Check Your Understanding + +include::questions/1-best-solution.adoc[leveloffset=+1] + +[.summary] +== Summary + +In this lesson, you explored some of the approaches for importing data. + +In the next lesson, you will explore some tools you can use to import data into Neo4j. \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/2-prerequisites/questions/1-best-solution.adoc b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/2-prerequisites/questions/1-best-solution.adoc new file mode 100644 index 000000000..4f6fb5f6c --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/lessons/2-prerequisites/questions/1-best-solution.adoc @@ -0,0 +1,21 @@ +[.question] += 1. What is the best solution? + +True or False - Using an ETL pipeline will *always* be the best solution for importing data into Neo4j. + +- [ ] True +- [*] False + +[TIP,role=hint] +.Hint +==== +Using an ETL pipeline is only one option for importing data into Neo4j. +The right solution will depend on what you are trying to achieve. +==== + +[TIP,role=solution] +.Solution +==== +The statement is False - there is no one best solution for importing data into Neo4j. +Ultimately, how you import data into Neo4j will depend on your specific requirements. +==== \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/module.adoc b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/module.adoc new file mode 100644 index 000000000..9dc8888e7 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/1-foundation/module.adoc @@ -0,0 +1,11 @@ += Foundation +:order: 1 + +In this module, you will: + +* Understand the differences between relational and graph data models +* Learn about the prerequisites and tools needed for importing relational data into Neo4j +* Explore the concepts that will guide your migration process + + +link:./1-comparing/[Ready? Let's go →, role=btn] diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/images/data-importer.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/images/data-importer.png new file mode 100644 index 000000000..b66dd3c28 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/images/data-importer.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/images/movies-data-model.svg b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/images/movies-data-model.svg new file mode 100644 index 000000000..0df4cba0b --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/images/movies-data-model.svg @@ -0,0 +1 @@ +ACTED_INDIRECTEDRATEDMoviePersonUser \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/add-node-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/add-node-annotated.png new file mode 100644 index 000000000..ba45e59eb Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/add-node-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/add-node.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/add-node.png new file mode 100644 index 000000000..ee4e8c96a Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/add-node.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/clear-model-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/clear-model-annotated.png new file mode 100644 index 000000000..731efc5f4 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/clear-model-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/clear-model.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/clear-model.png new file mode 100644 index 000000000..d70b42697 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/clear-model.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/connect-dialog.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/connect-dialog.png new file mode 100644 index 000000000..f35cac506 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/connect-dialog.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/data-importer-connect-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/data-importer-connect-annotated.png new file mode 100644 index 000000000..37b218c7c Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/data-importer-connect-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/data-importer-connect.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/data-importer-connect.png new file mode 100644 index 000000000..25666f53d Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/data-importer-connect.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/data-importer.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/data-importer.png new file mode 100644 index 000000000..128841a40 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/data-importer.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/download-model-data-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/download-model-data-annotated.png new file mode 100644 index 000000000..3364514f5 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/download-model-data-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/download-model.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/download-model.png new file mode 100644 index 000000000..52b7fabdc Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/download-model.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/edit-property-name-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/edit-property-name-annotated.png new file mode 100644 index 000000000..94ad3f64c Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/edit-property-name-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/edit-property-name.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/edit-property-name.png new file mode 100644 index 000000000..cf2dbdd26 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/edit-property-name.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/import-summary.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/import-summary.png new file mode 100644 index 000000000..37114bef7 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/import-summary.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/map-from-file-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/map-from-file-annotated.png new file mode 100644 index 000000000..2ee4a5eeb Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/map-from-file-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/map-from-file.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/map-from-file.png new file mode 100644 index 000000000..56843a84a Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/map-from-file.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/map-properties-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/map-properties-annotated.png new file mode 100644 index 000000000..7214cad2c Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/map-properties-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/map-properties.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/map-properties.png new file mode 100644 index 000000000..3048787bd Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/map-properties.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/mapped-properties.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/mapped-properties.png new file mode 100644 index 000000000..39362818d Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/mapped-properties.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/menu.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/menu.png new file mode 100644 index 000000000..7d3170c3b Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/menu.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/movie-label-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/movie-label-annotated.png new file mode 100644 index 000000000..aa7f03edb Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/movie-label-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/movie-label.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/movie-label.png new file mode 100644 index 000000000..fdf3988a6 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/movie-label.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/movies-file-contents.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/movies-file-contents.png new file mode 100644 index 000000000..e842214e5 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/movies-file-contents.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/person-label-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/person-label-annotated.png new file mode 100644 index 000000000..32ed45e1d Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/person-label-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/person-label.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/person-label.png new file mode 100644 index 000000000..8284de11b Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/person-label.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/persons-file-contents.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/persons-file-contents.png new file mode 100644 index 000000000..d1e144057 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/persons-file-contents.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/result.svg b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/result.svg new file mode 100644 index 000000000..3cf6f61b4 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/result.svg @@ -0,0 +1 @@ +Neo4j Graph VisualizationCreated using Neo4j (http://www.neo4j.com/) Harrison Ford Tom Hanks Robin Wright Sally Field Sean Bean David Morse Bruce Willis Chris Tucker Johnny Depp Quentin Tarant… Morgan Freem… Gene Hack… Richard Harris Kate Winslet Kirsten Dunst Jim Carrey Tom Wilkin… Ed Harris Terry Gilliam Brad Pitt Jon Seda Brittany Murphy Jonathan Pryce Robert De Niro Bob Hoskins \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/run-import-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/run-import-annotated.png new file mode 100644 index 000000000..09a4d491f Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/run-import-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/run-import.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/run-import.png new file mode 100644 index 000000000..d600cd654 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/run-import.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/set-id-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/set-id-annotated.png new file mode 100644 index 000000000..09473125b Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/set-id-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/set-id.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/set-id.png new file mode 100644 index 000000000..e862a66a9 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/set-id.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/upload-file.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/upload-file.png new file mode 100644 index 000000000..56e613922 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/images/upload-file.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/lesson.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/lesson.adoc new file mode 100644 index 000000000..e04c97078 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/lesson.adoc @@ -0,0 +1,262 @@ += Analyzing the Northwind Schema +:order: 1 +:type: lesson + +In this lesson, you will explore the Northwind database schema and understand its structure before designing a graph model. + + +== Understanding the Northwind Database + +The Northwind database represents a fictional company that sells food products. It contains data about: + +* **Customers** who place orders +* **Orders** containing multiple products +* **Products** organized into categories +* **Suppliers** who provide products +* **Employees** who process orders +* **Shippers** who deliver orders + + + +=== Core Business Tables + +[cols="1,3"] +|=== +| Table | Description + +| `customers` +| Companies that purchase products. Contains contact information, addresses, and company details. + +| `orders` +| Purchase orders placed by customers. Links to customers, employees, and shippers. + +| `order_details` +| Line items within orders. Links orders to products with quantity, price, and discount. + +| `products` +| Items available for sale. Links to categories and suppliers. + +| `categories` +| Product groupings (e.g., Beverages, Dairy Products, Seafood). + +| `suppliers` +| Companies that provide products. Contains contact and address information. + +| `employees` +| Staff members who process orders. Includes a self-referencing `reports_to` column for the management hierarchy. + +| `shippers` +| Delivery companies that transport orders. + +|=== + + +=== Supporting Tables + +[cols="1,3"] +|=== +| Table | Description + +| `territories` +| Geographic sales regions assigned to employees. + +| `region` +| Broader geographic areas containing territories. + +| `employee_territories` +| Junction table linking employees to their assigned territories. + +| `customer_demographics` +| Customer classification types. + +| `customer_customer_demo` +| Junction table linking customers to demographic types. + +| `us_states` +| Reference table for US state information. + +|=== + + +== Querying the Schema in PostgreSQL + +You can explore the schema structure directly in PostgreSQL. Here are some useful queries: + + +=== List All Tables + +[source,sql] +---- +SELECT table_name +FROM information_schema.tables +WHERE table_schema = 'public' +ORDER BY table_name; +---- + +// TODO: Add screenshot of query results in Postico/pgAdmin + + +=== View Table Columns + +To see the columns in a specific table: + +[source,sql] +---- +SELECT column_name, data_type, is_nullable +FROM information_schema.columns +WHERE table_name = 'customers' +ORDER BY ordinal_position; +---- + +// TODO: Add screenshot showing customers table columns + + +=== Count Records in Tables + +Understanding the data volume helps with import planning: + +[source,sql] +---- +SELECT 'customers' as table_name, COUNT(*) as row_count FROM customers +UNION ALL +SELECT 'orders', COUNT(*) FROM orders +UNION ALL +SELECT 'order_details', COUNT(*) FROM order_details +UNION ALL +SELECT 'products', COUNT(*) FROM products +UNION ALL +SELECT 'categories', COUNT(*) FROM categories +UNION ALL +SELECT 'suppliers', COUNT(*) FROM suppliers +UNION ALL +SELECT 'employees', COUNT(*) FROM employees; +---- + +// TODO: Add screenshot of record counts + + +== Understanding Foreign Keys + +Foreign keys define the relationships between tables. These will become relationships in your graph model. + +Run this query to see all foreign key relationships: + +[source,sql] +---- +SELECT + tc.table_name AS source_table, + kcu.column_name AS source_column, + ccu.table_name AS target_table, + ccu.column_name AS target_column +FROM information_schema.table_constraints tc +JOIN information_schema.key_column_usage kcu + ON tc.constraint_name = kcu.constraint_name +JOIN information_schema.constraint_column_usage ccu + ON ccu.constraint_name = tc.constraint_name +WHERE tc.constraint_type = 'FOREIGN KEY' +ORDER BY tc.table_name; +---- + +// TODO: Add screenshot of foreign key relationships + + +=== Relationships in Northwind + +The query above reveals these important relationships: + +[cols="1,1,1"] +|=== +| Source Table | Foreign Key | References + +| `orders` +| `customer_id` +| `customers.customer_id` + +| `orders` +| `employee_id` +| `employees.employee_id` + +| `orders` +| `ship_via` +| `shippers.shipper_id` + +| `order_details` +| `order_id` +| `orders.order_id` + +| `order_details` +| `product_id` +| `products.product_id` + +| `products` +| `category_id` +| `categories.category_id` + +| `products` +| `supplier_id` +| `suppliers.supplier_id` + +| `employees` +| `reports_to` +| `employees.employee_id` + +|=== + + +== Sample Data Exploration + +Before modelling, explore some actual data to understand its structure: + + +=== View Customer Data + +[source,sql] +---- +SELECT customer_id, company_name, contact_name, city, country +FROM customers +LIMIT 5; +---- + +// TODO: Add screenshot of customer data + + +=== View Order with Details + +[source,sql] +---- +SELECT + o.order_id, + c.company_name AS customer, + e.first_name || ' ' || e.last_name AS employee, + o.order_date, + p.product_name, + od.quantity, + od.unit_price +FROM orders o +JOIN customers c ON o.customer_id = c.customer_id +JOIN employees e ON o.employee_id = e.employee_id +JOIN order_details od ON o.order_id = od.order_id +JOIN products p ON od.product_id = p.product_id +LIMIT 10; +---- + +// TODO: Add screenshot of joined order data + + +[.quiz] +== Check Your Understanding + +include::questions/1-requirements.adoc[leveloffset=+1] + + +[.summary] +== Summary + +In this lesson, you explored the Northwind database schema and learned: + +* The main tables and their purposes +* How to query schema information in PostgreSQL +* The foreign key relationships between tables +* How to explore sample data + +In the next lesson, you will identify which tables should become nodes in your graph model. diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/questions/1-requirements.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/questions/1-requirements.adoc new file mode 100644 index 000000000..71b42d077 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/1-connecting-to-postgres/questions/1-requirements.adoc @@ -0,0 +1,22 @@ +[.question] += Analyzing a Relational Schema + +Which SQL query would you use to find all foreign key relationships in a PostgreSQL database? + +- [ ] `SELECT * FROM pg_tables` +- [ ] `SHOW FOREIGN KEYS` +- [x] Query the `information_schema.table_constraints` table with `constraint_type = 'FOREIGN KEY'` +- [ ] `DESCRIBE TABLE relationships` + + +[TIP,role=hint] +.Hint +==== +PostgreSQL stores constraint information in the `information_schema` tables. +==== + +[TIP,role=solution] +.Solution +==== +To find foreign key relationships in PostgreSQL, query the `information_schema.table_constraints` table and filter by `constraint_type = 'FOREIGN KEY'`. This returns all foreign key constraints defined in the database. +==== diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/images/ER.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/images/ER.png new file mode 100644 index 000000000..6fe4269b9 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/images/ER.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/images/add-custom-property-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/images/add-custom-property-annotated.png new file mode 100644 index 000000000..0ffc3034c Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/images/add-custom-property-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/images/add-custom-property.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/images/add-custom-property.png new file mode 100644 index 000000000..b71c64ada Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/images/add-custom-property.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/images/node-labels.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/images/node-labels.png new file mode 100644 index 000000000..67da3423b Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/images/node-labels.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/lesson.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/lesson.adoc new file mode 100644 index 000000000..179946a4b --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/lesson.adoc @@ -0,0 +1,385 @@ += Identifying Nodes from Tables +:order: 2 +:type: lesson + +In this lesson, you will determine which relational tables should become nodes in your graph model and which ones should not. Not every table becomes a node - some become relationships, some become properties, and some may not be needed at all. + +== Understanding the Northwind Database Schema + +image::images/ER.png[Northwind Entity-Relationship Diagram showing all tables and their relationships] + +The Northwind database schema is a classic example of a relational database schema. It is a small database that is often used as a teaching example in database courses. + +Make a note of the tables and their relationships. + + +== Understanding the Mapping + +Before getting into the specifics, the following table shows how relational concepts map to graph concepts. This mapping forms the foundation for all transformation decisions: + +[cols="1,1,2"] +|=== +| Relational Concept | Graph Concept | Explanation + +| Entity table +| Node label +| A table like `customers` becomes the `Customer` node label + +| Row (record) +| Node instance +| Each row in the `customers` table becomes an individual `Customer` node + +| Column (attribute) +| Property +| Columns like `company_name` and `city` become properties on the node + +| Foreign key column +| Relationship +| A column like `customer_id` in the `orders` table becomes a `PLACED` relationship + +| Junction table +| Relationship (often with properties) +| Tables like `order_details` become relationships like `CONTAINS` + +|=== + +[IMPORTANT] +.Correct mapping of rows and columns +==== +A common misconception is that "rows become nodes and columns become relationships." This is incorrect. + +The correct mapping is: + +* **Rows** → Individual **node instances** (one row = one node) +* **Columns** → **Properties** on nodes (or relationships) +* **Foreign key columns** → **Relationships** between nodes +==== + +[TIP] +.Bookmark this reference +==== +Bookmark this mapping table and the misconception correction above. These are the two most common sources of confusion when designing graph models from relational schemas. +==== + + +== From Tables to Nodes + +Not every table in a relational database becomes a node in a graph. The transformation follows these general principles: + +* **Entity tables** (tables representing real-world objects) typically become nodes +* **Junction tables** (tables that only connect other tables) often become relationships +* **Lookup tables** may become nodes, properties, or be merged into other nodes + + +== Analyzing Northwind Tables + +The following sections categorize the Northwind tables: + + +=== Tables That Become Nodes + +These tables represent distinct business entities and should become nodes: + +[cols="1,2,2"] +|=== +| Table | Node Label | Reasoning + +| `customers` +| `Customer` +| Represents companies that place orders - a core business entity + +| `orders` +| `Order` +| Represents purchase transactions - central to the business process + +| `products` +| `Product` +| Represents items for sale - a core business entity + +| `categories` +| `Category` +| Represents product groupings - useful for navigation and filtering + +| `suppliers` +| `Supplier` +| Represents companies providing products - important business relationship + +| `employees` +| `Employee` +| Represents staff members - needed for order processing and hierarchy + +| `shippers` +| `Shipper` +| Represents delivery companies - part of the order fulfillment process + +|=== + + +=== Tables That Become Relationships + +These tables exist primarily to connect other entities and do NOT become nodes: + +[cols="1,2,2"] +|=== +| Table | Becomes | Reasoning + +| `order_details` +| `CONTAINS` relationship (Order to Product) +| Junction table connecting orders to products. The `quantity`, `unit_price`, and `discount` columns become properties on the relationship. + +| `employee_territories` +| `ASSIGNED_TO` relationship (Employee to Territory) +| Pure junction table with only two foreign keys - no additional data to store. + +| `customer_customer_demo` +| `HAS_DEMOGRAPHIC` relationship (Customer to Demographics) +| Junction table for customer classifications with no additional properties. + +|=== + +[NOTE] +.Junction tables become relationships, not nodes +==== +**Why do these tables not become nodes?** + +Junction tables exist solely to implement many-to-many relationships in relational databases. They do not represent independent business entities - they represent the *connection* between entities. + +In the graph model, this connection is naturally represented as a relationship, which can also have properties. +==== + + +=== Tables That Become Properties (Not Nodes) + +Some tables are better represented as properties on other nodes rather than separate nodes: + +[cols="1,2,2"] +|=== +| Table | Becomes | Reasoning + +| `us_states` +| Not imported (or properties if needed) +| Reference data with state codes and names. If needed, `state_name` could be a property on Customer or Supplier nodes instead of a separate node. + +| `customer_demographics` +| Property or label on Customer +| Contains only `customer_type_id` and `customer_desc`. Instead of creating a separate node, the description could become a property or additional label on Customer nodes. + +|=== + + +=== Tables That Could Go Either Way + +Some tables require careful consideration based on your query patterns: + +[cols="1,3"] +|=== +| Table | Consideration + +| `territories` +| **As nodes:** If you need to query "which employees cover territory X?" or "what territories are in region Y?" then Territory nodes make sense. + +**As properties:** If you only need to know an employee's territory name, store it as a property on the Employee node or the ASSIGNED_TO relationship. + +| `region` +| **As nodes:** Useful if you need geographic hierarchy traversal (Employee → Territory → Region). + +**As properties:** If regions are just labels, store `region_name` as a property on Territory nodes. + +|=== + + +== When Tables Should NOT Become Nodes + +Here are common scenarios where tables should not become nodes: + + +=== Scenario 1: Pure Junction Tables + +A table with only foreign keys and no meaningful additional data should become a relationship. + +**Example:** `employee_territories` +[source,sql] +---- +CREATE TABLE employee_territories ( + employee_id INTEGER, + territory_id VARCHAR(20), + PRIMARY KEY (employee_id, territory_id) +); +---- + +This table has no additional columns - it only connects employees to territories. It becomes: + +[source] +---- +(Employee)-[:ASSIGNED_TO]->(Territory) +---- + + +=== Scenario 2: Lookup Tables with Few Values + +Small reference tables with static values can often be eliminated. + +**Example:** `customer_demographics` +[source,sql] +---- +CREATE TABLE customer_demographics ( + customer_type_id VARCHAR(10) PRIMARY KEY, + customer_desc TEXT +); +---- + +If this table only has 3-5 values like "Premium", "Standard", "Basic", consider: + +* Using **node labels** instead: `(:Customer:Premium)`, `(:Customer:Standard)` +* Using a **property**: `(c:Customer {customerType: "Premium"})` + + +=== Scenario 3: Audit/Log Tables + +Tables that track changes or history may not belong in the main graph. + +**Example:** An `order_audit` table tracking who modified orders and when: + +* If you rarely query this data, keep it in the relational database +* If you need it, consider a separate audit graph or time-series database + + +=== Scenario 4: Denormalized Reference Data + +Tables created purely for reporting or denormalization may be redundant. + +**Example:** A `customer_order_summary` table with pre-calculated totals: + +* This data can be calculated with Cypher queries +* No need to import redundant summary tables + + +== Step-by-Step Node Identification + +Follow these steps to identify nodes in any relational schema: + + +=== Step 1: Identify Primary Entities + +Look for tables that: + +* Have a single-column primary key (e.g., `customer_id`, `order_id`) +* Represent real-world objects or concepts +* Are referenced by other tables via foreign keys + +In Northwind, these are: `customers`, `orders`, `products`, `categories`, `suppliers`, `employees`, `shippers` + + +=== Step 2: Examine Junction Tables + +Junction tables typically have: + +* Composite primary keys (two or more columns) +* Foreign keys to two or more other tables +* Few or no additional columns beyond the keys + +In Northwind, `order_details` is a junction table connecting `orders` and `products`. + + +=== Step 3: Decide on Junction Table Handling + +For each junction table, decide whether it should become: + +**A relationship** - when the table primarily connects two entities: + +[source] +---- +order_details → CONTAINS relationship from Order to Product +---- + +**A node** - when the junction table has significant properties or is queried independently: + +[source] +---- +If order_details had complex data like shipment tracking, +it might warrant its own OrderLine node +---- + + +=== Step 4: Handle Lookup Tables + +Small lookup tables can be: + +* **Nodes** - if you need to query or traverse them +* **Properties** - if they're just labels or categories +* **Node labels** - if they represent types of another entity + + +== The Northwind Graph Model + +Based on this analysis, the Northwind graph model will include: + + +=== Node Labels + +* `Customer` - from `customers` table +* `Order` - from `orders` table +* `Product` - from `products` table +* `Category` - from `categories` table +* `Supplier` - from `suppliers` table +* `Employee` - from `employees` table +* `Shipper` - from `shippers` table + +image::images/node-labels.png[Northwind Node Labels - Tables becoming graph nodes,width=800,align=center] + + +=== Simplified Model + +For this course, you will focus on the core business entities. The simplified model excludes: + +* Territory and region data (can be added as an extension) +* Customer demographics (rarely used in the sample data) +* US states reference data + +This keeps the import manageable while covering all the relevant concepts. + + +== Naming Conventions + +When converting table names to node labels: + +[cols="1,1,2"] +|=== +| Convention | Example | Notes + +| Singular form +| `Customer` not `Customers` +| Nodes represent individual entities + +| PascalCase +| `OrderDetail` not `order_detail` +| Standard Neo4j naming convention + +| Descriptive names +| `Category` not `Cat` +| Clear, readable labels + +|=== + + +[.quiz] +== Check Your Understanding + +include::questions/1-multiple-properties.adoc[leveloffset=+1] + +include::questions/2-mapping.adoc[leveloffset=+1] + +include::questions/3-not-nodes.adoc[leveloffset=+1] + + +[.summary] +== Summary + +In this lesson, you learned: + +* How to categorize relational tables as entities, junction tables, or lookup tables +* Which Northwind tables will become nodes in the graph +* How to handle junction tables (as relationships vs. nodes) +* Naming conventions for node labels + +In the next lesson, you will map the foreign key relationships to graph relationships. diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/questions/1-multiple-properties.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/questions/1-multiple-properties.adoc new file mode 100644 index 000000000..5d15fdd25 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/questions/1-multiple-properties.adoc @@ -0,0 +1,24 @@ +[.question] += Tables to Nodes + +Which type of relational table typically becomes a relationship (rather than a node) in a graph model? + +- [ ] Entity tables with a single primary key +- [x] Junction tables that connect two other tables +- [ ] Lookup tables with reference data +- [ ] Tables with many columns + + +[TIP,role=hint] +.Hint +==== +Think about tables that exist primarily to connect other tables together, often with composite primary keys. +==== + +[TIP,role=solution] +.Solution +==== +**Junction tables** (also called associative tables or bridge tables) typically become relationships in a graph model. These tables exist to implement many-to-many relationships in relational databases and usually have composite primary keys made up of foreign keys to other tables. + +For example, `order_details` connects `orders` and `products` and becomes the `CONTAINS` relationship in the graph. +==== diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/questions/2-mapping.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/questions/2-mapping.adoc new file mode 100644 index 000000000..ccb6b931d --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/questions/2-mapping.adoc @@ -0,0 +1,33 @@ +[.question] += Relational to Graph Mapping + +In a relational database, each row in the `customers` table represents one customer. When migrating to Neo4j, what does each row become? + +- [ ] A property on the Customer node +- [ ] A relationship between nodes +- [x] An individual Customer node instance +- [ ] A node label + + +[TIP,role=hint] +.Hint +==== +Think about the one-to-one relationship between records in a table and their graph equivalent. +==== + +[TIP,role=solution] +.Solution +==== +Each **row** in a relational table becomes an **individual node instance** in the graph. + +For example: +* The `customers` table with 91 rows becomes 91 individual `Customer` nodes +* Each row's columns (like `company_name`, `city`) become properties on that specific node + +The correct mapping is: +* Table → Node label +* Row → Node instance +* Column → Property +* Foreign key → Relationship +==== + diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/questions/3-not-nodes.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/questions/3-not-nodes.adoc new file mode 100644 index 000000000..be28d1964 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/2-analysing-schema/questions/3-not-nodes.adoc @@ -0,0 +1,32 @@ +[.question] += Tables That Do Not Become Nodes + +Which of the following scenarios would typically NOT result in creating a node in the graph? (Select all that apply) + +- [x] A junction table with only two foreign key columns +- [ ] A table representing customers with contact information +- [x] A small lookup table with 3 static values like "High", "Medium", "Low" +- [x] An audit log table tracking record modifications +- [ ] A table representing products with pricing and inventory data + + +[TIP,role=hint] +.Hint +==== +Think about which tables represent real business entities versus which exist only for technical reasons in the relational model. +==== + +[TIP,role=solution] +.Solution +==== +The following typically do NOT become nodes: + +* **Junction tables with only foreign keys** - These become relationships. Example: `employee_territories` becomes an `ASSIGNED_TO` relationship. + +* **Small lookup tables with static values** - These can become node labels or properties instead. Example: Priority levels ("High", "Medium", "Low") can be a property on the node. + +* **Audit log tables** - These often do not belong in the main graph model and may be kept in the relational database or a separate system. + +Tables representing **customers** and **products** DO become nodes because they are core business entities with meaningful properties. +==== + diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/complete-northwind-model.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/complete-northwind-model.png new file mode 100644 index 000000000..bc0ce68d1 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/complete-northwind-model.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/customer-placed-order.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/customer-placed-order.png new file mode 100644 index 000000000..9642c8daf Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/customer-placed-order.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/employee-processed-order.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/employee-processed-order.png new file mode 100644 index 000000000..e57997967 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/employee-processed-order.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/employee-reports-to.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/employee-reports-to.png new file mode 100644 index 000000000..f73cff403 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/employee-reports-to.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/model.svg b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/model.svg new file mode 100644 index 000000000..b6d277caf --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/model.svg @@ -0,0 +1 @@ +Neo4j Graph VisualizationCreated using Neo4j (http://www.neo4j.com/)ORDERSPART_OFSUPPLIESPURCHASED Order Category Customer Product Supplier \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/order-contains-product.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/order-contains-product.png new file mode 100644 index 000000000..ad9009ea0 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/order-contains-product.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/order-shipped-by-shipper.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/order-shipped-by-shipper.png new file mode 100644 index 000000000..542c946d0 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/order-shipped-by-shipper.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/product-in-category.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/product-in-category.png new file mode 100644 index 000000000..814cf1745 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/product-in-category.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/result.svg b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/result.svg new file mode 100644 index 000000000..35d079f78 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/result.svg @@ -0,0 +1 @@ +Neo4j Graph VisualizationCreated using Neo4j (http://www.neo4j.com/) Toy Story Jumanji Grumpier M… Waiting to Exhale Father of Bri… Heat Sabrina Tom and Huck Sudden Death GoldenE… American Presid… Dracula: Dead and L Balto Nixon Cutthroat Island Casino Sense and Sen… Four Rooms Ace Ventura:N… Money Train Get Shorty Copycat Assassins Powder Leaving V… \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/supplier-supplies-product.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/supplier-supplies-product.png new file mode 100644 index 000000000..8e7a036e7 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/images/supplier-supplies-product.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/lesson.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/lesson.adoc new file mode 100644 index 000000000..177d01b6a --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/lesson.adoc @@ -0,0 +1,466 @@ += Mapping Relationships +:order: 3 +:type: lesson + +In this lesson, you will learn how to transform foreign key relationships from the relational schema into graph relationships. This transformation is where the graph model begins to diverge structurally from the relational model. + + +== From Foreign Keys to Relationships + +In relational databases, relationships between tables are implicit - defined through foreign keys. In a graph database, relationships are explicit and first-class citizens. + +image::images/model.svg[Northwind graph model showing nodes and relationships,width=600,align=center] + +The transformation process involves: + +. Identifying foreign key constraints +. Determining relationship direction +. Naming relationships meaningfully +. Deciding which properties belong on relationships + + +== Common Misconceptions About Relationships + +Before getting into the mapping, the following section addresses common misconceptions that frequently cause problems during migration: + +[IMPORTANT] +.Not every foreign key becomes a relationship +==== +Some foreign keys reference lookup tables that might become properties instead of relationships. + +**Example:** If you have a `status_id` foreign key pointing to a `statuses` table with values like "Pending", "Shipped", "Delivered", you might choose to store `status` as a property on the Order node rather than creating a separate Status node and relationship. +==== + +[IMPORTANT] +.Use meaningful verbs, not column names +==== +The foreign key column (like `customer_id`) does NOT become the relationship type. Instead, use a meaningful verb that describes the business relationship. + +**Wrong:** `(Order)-[:CUSTOMER_ID]->(Customer)` + +**Correct:** `(Customer)-[:PLACED]->(Order)` +==== + +[IMPORTANT] +.Direction follows business semantics, not foreign key direction +==== +In SQL, `orders.customer_id` references `customers.customer_id`, but this does not mean the relationship should point from Order to Customer. + +Choose direction based on **business semantics**: A customer places an order, so `(Customer)-[:PLACED]->(Order)` reads better than `(Order)-[:PLACED_BY]->(Customer)`. +==== + +[IMPORTANT] +.Junction table rows create one relationship each +==== +True for regular foreign keys, but be careful with junction tables. In `order_details`, each row represents ONE relationship between an Order and a Product - not two separate relationships. +==== + +[TIP] +.Bookmark these misconceptions +==== +Bookmark these four misconceptions. They represent the most frequent errors made when transforming foreign keys into graph relationships. Review them before starting any migration project. +==== + + +== Foreign Key Analysis + +Recall the foreign keys in the Northwind database: + +[cols="1,1,1,1"] +|=== +| Source Table | Foreign Key | Target Table | Target Key + +| `orders` +| `customer_id` +| `customers` +| `customer_id` + +| `orders` +| `employee_id` +| `employees` +| `employee_id` + +| `orders` +| `ship_via` +| `shippers` +| `shipper_id` + +| `order_details` +| `order_id` +| `orders` +| `order_id` + +| `order_details` +| `product_id` +| `products` +| `product_id` + +| `products` +| `category_id` +| `categories` +| `category_id` + +| `products` +| `supplier_id` +| `suppliers` +| `supplier_id` + +| `employees` +| `reports_to` +| `employees` +| `employee_id` + +|=== + + +== Designing Graph Relationships + +For each foreign key, design a meaningful graph relationship: + + +=== Customer Orders + +**Foreign Key:** `orders.customer_id` → `customers.customer_id` + +**Graph Relationship:** + +[source] +---- +(Customer)-[:PLACED]->(Order) +---- + +The customer places an order. The relationship direction reflects the business action. + +image::images/customer-placed-order.png[Customer PLACED Order relationship mapping,width=700,align=center] + + +=== Employee Processes Order + +**Foreign Key:** `orders.employee_id` → `employees.employee_id` + +**Graph Relationship:** + +[source] +---- +(Employee)-[:PROCESSED]->(Order) +---- + +Alternatively, you could model this as `(Order)-[:PROCESSED_BY]->(Employee)`. Choose based on your most common query patterns. + +image::images/employee-processed-order.png[Employee PROCESSED Order relationship mapping,width=700,align=center] + + +=== Order Shipped By + +**Foreign Key:** `orders.ship_via` → `shippers.shipper_id` + +**Graph Relationship:** + +[source] +---- +(Order)-[:SHIPPED_BY]->(Shipper) +---- + +image::images/order-shipped-by-shipper.png[Order SHIPPED_BY Shipper relationship mapping,width=700,align=center] + + +=== Order Contains Products + +**Foreign Key:** `order_details.order_id` → `orders.order_id` and `order_details.product_id` → `products.product_id` + +This junction table becomes a relationship with properties: + +**Graph Relationship:** + +[source] +---- +(Order)-[:CONTAINS {quantity, unitPrice, discount}]->(Product) +---- + +The `order_details` table data becomes properties on the `CONTAINS` relationship. + +image::images/order-contains-product.png[Order CONTAINS Product - Junction table becomes relationship with properties,width=800,align=center] + + +=== Product Categorization + +**Foreign Key:** `products.category_id` → `categories.category_id` + +**Graph Relationship:** + +[source] +---- +(Product)-[:IN_CATEGORY]->(Category) +---- + +image::images/product-in-category.png[Product IN_CATEGORY Category relationship mapping,width=700,align=center] + + +=== Product Supplier + +**Foreign Key:** `products.supplier_id` → `suppliers.supplier_id` + +**Graph Relationship:** + +[source] +---- +(Supplier)-[:SUPPLIES]->(Product) +---- + +Or alternatively: `(Product)-[:SUPPLIED_BY]->(Supplier)` + +image::images/supplier-supplies-product.png[Supplier SUPPLIES Product relationship mapping,width=700,align=center] + + +=== Employee Hierarchy + +**Foreign Key:** `employees.reports_to` → `employees.employee_id` + +**Graph Relationship:** + +[source] +---- +(Employee)-[:REPORTS_TO]->(Employee) +---- + +This self-referencing relationship creates the management hierarchy. + +image::images/employee-reports-to.png[Employee REPORTS_TO Employee - Self-referencing relationship for hierarchy,width=700,align=center] + + +== Complete Relationship Model + +The full Northwind graph model includes these relationships: + +[cols="1,2,2"] +|=== +| Relationship Type | From Node | To Node + +| `PLACED` +| `Customer` +| `Order` + +| `PROCESSED` +| `Employee` +| `Order` + +| `SHIPPED_BY` +| `Order` +| `Shipper` + +| `CONTAINS` +| `Order` +| `Product` + +| `IN_CATEGORY` +| `Product` +| `Category` + +| `SUPPLIES` +| `Supplier` +| `Product` + +| `REPORTS_TO` +| `Employee` +| `Employee` + +|=== + +image::images/complete-northwind-model.png[Complete Northwind Graph Model showing all nodes and relationships,width=800,align=center] + + +== Relationship Direction Guidelines + +When deciding relationship direction, consider: + +. **Business semantics** - Which direction makes logical sense? (Customer places Order, not Order places Customer) + +. **Query patterns** - Which direction will you traverse most often? + +. **Readability** - The relationship should read naturally in a sentence + +[NOTE] +.Traversal works in both directions +==== +In Neo4j, you can traverse relationships in either direction regardless of how they are stored. The direction you choose affects query readability and can have minor performance implications for very large graphs. +==== + + +== Relationship Naming Conventions + +Follow these conventions for relationship types: + +[cols="1,2"] +|=== +| Convention | Example + +| UPPER_SNAKE_CASE +| `PLACED`, `REPORTS_TO`, `IN_CATEGORY` + +| Active voice verbs +| `SUPPLIES` not `SUPPLIED` + +| Descriptive names +| `SHIPPED_BY` not `SHIP` + +| Past tense for completed actions +| `PLACED` for orders that were placed + +|=== + + +== Handling Many-to-Many Relationships + +The `order_details` table represents a many-to-many relationship between orders and products. In the graph model: + +* Each row in `order_details` becomes a `CONTAINS` relationship +* The `quantity`, `unit_price`, and `discount` columns become relationship properties +* No separate node is needed for order details + +This is an advantage of graph databases: relationship properties eliminate the need for junction tables. In relational databases, storing attributes on a many-to-many relationship requires an intermediary table; in graph databases, these attributes become properties on the relationship itself. + + +== What Does NOT Become a Relationship + +Not every foreign key should become a relationship. Here are scenarios where you might choose differently: + + +=== Scenario 1: Foreign Keys to Small Lookup Tables + +When a foreign key references a small lookup table with static values, consider using a property instead. + +**Example:** A `priority_id` foreign key to a `priorities` table: + +[source,sql] +---- +-- Relational model +SELECT o.order_id, p.priority_name +FROM orders o +JOIN priorities p ON o.priority_id = p.priority_id; +---- + +**Option A - As a relationship (more complex):** +[source] +---- +(Order)-[:HAS_PRIORITY]->(Priority {name: "High"}) +---- + +**Option B - As a property (simpler):** +[source] +---- +(Order {priority: "High"}) +---- + +Choose Option B when: + +* The lookup table has few values (< 10) +* You do not need to traverse or query the lookup values independently +* The values are unlikely to change + + +=== Scenario 2: Redundant Relationships + +Sometimes a relationship can be inferred from other relationships and does not need to be stored. + +**Example:** If you have: +[source] +---- +(Customer)-[:PLACED]->(Order)-[:CONTAINS]->(Product) +---- + +You might be tempted to also create: +[source] +---- +(Customer)-[:PURCHASED]->(Product) +---- + +But this is redundant - you can always find what products a customer purchased by traversing through orders. Only create direct relationships if: + +* The traversal path is very long (performance concern) +* The direct relationship has unique properties not derivable from the path + + +=== Scenario 3: Self-Referencing Foreign Keys That Represent Hierarchy Levels + +Sometimes self-referencing tables encode fixed hierarchy levels rather than flexible relationships. + +**Example:** An `employees` table with `level_1_manager_id`, `level_2_manager_id`, `level_3_manager_id` columns. + +Instead of creating three different relationship types, consider: + +* Using a single `REPORTS_TO` relationship and traversing the hierarchy +* Or storing the level as a property on the relationship + + +=== Scenario 4: Foreign Keys for Audit/Metadata + +Foreign keys that track who created or modified records might not need relationships. + +**Example:** `created_by_user_id` and `modified_by_user_id` columns: + +[source,sql] +---- +CREATE TABLE orders ( + order_id INTEGER PRIMARY KEY, + created_by_user_id INTEGER, + modified_by_user_id INTEGER, + -- ... other columns +); +---- + +Consider: + +* **As relationships** - If you need to query "what orders did user X create?" +* **As properties** - If this is just audit data you rarely query: `(Order {createdBy: "user123"})` + + +== Relationship Cardinality Considerations + +Understanding cardinality helps you design better relationships: + +[cols="1,2,2"] +|=== +| SQL Cardinality | Graph Representation | Example + +| One-to-One +| Single relationship (consider merging nodes) +| `(Person)-[:HAS_PASSPORT]->(Passport)` - Could also be properties on Person + +| One-to-Many +| Multiple relationships from one node +| `(Customer)-[:PLACED]->(Order)` - One customer, many orders + +| Many-to-Many +| Junction table becomes relationship with properties +| `(Order)-[:CONTAINS {quantity}]->(Product)` + +|=== + +[NOTE] +.Consider merging one-to-one relationships +==== +**One-to-One relationships** are rare in graph databases. If two entities always exist together and are always queried together, consider merging them into a single node with combined properties. +==== + + +[.quiz] +== Check Your Understanding + +include::questions/verify.adoc[leveloffset=+1] + +include::questions/2-misconceptions.adoc[leveloffset=+1] + +include::questions/3-not-relationships.adoc[leveloffset=+1] + + +[.summary] +== Summary + +In this lesson, you learned: + +* How to transform foreign keys into graph relationships +* Guidelines for choosing relationship direction +* Naming conventions for relationship types +* How to handle junction tables as relationships with properties + +In the next lesson, you will design the properties for nodes and relationships. diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/questions/2-misconceptions.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/questions/2-misconceptions.adoc new file mode 100644 index 000000000..022b93d2a --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/questions/2-misconceptions.adoc @@ -0,0 +1,34 @@ +[.question] += Relationship Naming + +A relational table `orders` has a foreign key column `customer_id` that references `customers.customer_id`. What should the graph relationship type be named? + +- [ ] `CUSTOMER_ID` - using the column name +- [ ] `ORDERS_CUSTOMERS` - using the table names +- [x] `PLACED` - using a meaningful verb describing the business action +- [ ] `FK_CUSTOMER` - using the foreign key prefix + + +[TIP,role=hint] +.Hint +==== +Relationship types should describe the business meaning of the connection, not the technical implementation. +==== + +[TIP,role=solution] +.Solution +==== +The relationship should be named **`PLACED`** (or similar verb like `MADE`, `SUBMITTED`). + +**Why not the other options?** + +* `CUSTOMER_ID` - This is the column name, not a meaningful relationship description +* `ORDERS_CUSTOMERS` - This describes the tables, not the business relationship +* `FK_CUSTOMER` - This is technical jargon from the relational model + +Good relationship names: +* Use verbs that describe the action or connection +* Read naturally in a sentence: "Customer PLACED Order" +* Follow UPPER_SNAKE_CASE convention +==== + diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/questions/3-not-relationships.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/questions/3-not-relationships.adoc new file mode 100644 index 000000000..c21586c21 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/questions/3-not-relationships.adoc @@ -0,0 +1,40 @@ +[.question] += Foreign Keys That May Not Become Relationships + +A table has a `status_id` foreign key pointing to a `statuses` table containing 5 values: "New", "Processing", "Shipped", "Delivered", "Cancelled". What is often the best approach? + +- [ ] Create a Status node for each value and a HAS_STATUS relationship +- [x] Store status as a property on the node instead of creating a relationship +- [ ] Create 5 different relationship types, one for each status +- [ ] Ignore the status data entirely + + +[TIP,role=hint] +.Hint +==== +Consider whether you need to traverse to the status or just filter/display it. +==== + +[TIP,role=solution] +.Solution +==== +For small lookup tables with static values, **storing as a property** is often the best approach: + +[source] +---- +(Order {status: "Shipped"}) +---- + +**Why not create Status nodes?** + +* Only 5 values - not worth the overhead of separate nodes +* You typically filter by status (`WHERE o.status = "Shipped"`) rather than traverse to it +* Status values are unlikely to have their own properties + +**When WOULD you create Status nodes?** + +* If statuses have additional properties (description, color, sort order) +* If you need to query "all possible statuses" independently +* If the status list is dynamic and managed separately +==== + diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/questions/verify.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/questions/verify.adoc new file mode 100644 index 000000000..3b71a7f63 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/questions/verify.adoc @@ -0,0 +1,24 @@ +[.question] += Relationship Direction + +When designing a relationship between Customer and Order nodes, which direction best represents the business semantics? + +- [x] `(Customer)-[:PLACED]->(Order)` - Customer placed the Order +- [ ] `(Order)-[:PLACED]->(Customer)` - Order placed the Customer +- [ ] Direction does not matter in Neo4j +- [ ] Both directions should be created + + +[TIP,role=hint] +.Hint +==== +Think about who performs the action. In business terms, who places an order? +==== + +[TIP,role=solution] +.Solution +==== +`(Customer)-[:PLACED]->(Order)` is the correct direction because it reflects the business semantics - a customer places an order, not the other way around. + +While Neo4j allows traversing relationships in either direction, choosing a meaningful direction makes queries more readable and aligns with business semantics. +==== diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/verify.cypher b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/verify.cypher new file mode 100644 index 000000000..e05643b75 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/3-identifying-nodes/verify.cypher @@ -0,0 +1 @@ +MATCH (m:Movie) RETURN true AS outcome LIMIT 1 diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/4-mapping-relationships/images/directed-graph.svg b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/4-mapping-relationships/images/directed-graph.svg new file mode 100644 index 000000000..011bbd714 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/4-mapping-relationships/images/directed-graph.svg @@ -0,0 +1 @@ +Neo4j Graph VisualizationCreated using Neo4j (http://www.neo4j.com/)DIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTEDDIRECTED John Lasset… Toy Story Joe Johnst… Jumanji Howard Deutch Grumpier M… Forest Whita… Waiting to Exhale Charles Shyer Father of Bri… Michael Mann Heat Sydney Pollack Sabrina Peter Hewitt Tom and Huck Peter Hyams Sudden Death Martin Camp… GoldenE… Rob Reiner American Presid… Mel Brooks Dracula: Dead and L Simon Wells Balto Oliver Stone Nixon Renny Harlin Cutthroat Island Martin Scors… Casino Ang Lee Sense and Sen… Alexandre Roc… Four Rooms Robert Rodrig… Allison Anders Quentin Tarant… Steve Oedek… Ace Ventura:N… Joseph Ruben Money Train Barry Sonne… Get Shorty Jon Amiel Copycat \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/4-mapping-relationships/images/directed.svg b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/4-mapping-relationships/images/directed.svg new file mode 100644 index 000000000..4035e0f73 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/4-mapping-relationships/images/directed.svg @@ -0,0 +1 @@ +ACTED_INDIRECTEDMoviePerson \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/4-mapping-relationships/lesson.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/4-mapping-relationships/lesson.adoc new file mode 100644 index 000000000..2ce40198c --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/4-mapping-relationships/lesson.adoc @@ -0,0 +1,552 @@ += Designing Properties +:order: 4 +:type: lesson + +In this lesson, you will map relational columns to graph properties and make decisions about data types and naming conventions. + + +== From Columns to Properties + +Relational table columns become properties on nodes or relationships in the graph. However, not every column needs to become a property: + +* **Primary keys** become node identifiers (and often properties too) +* **Foreign keys** are replaced by relationships +* **Data columns** become node or relationship properties +* **Computed columns** may be calculated at query time instead + + +== Property Design Principles + +When designing properties, consider: + +. **Relevance** - Does this property serve your query needs? +. **Data type** - What is the appropriate Neo4j data type? +. **Naming** - Is the property name clear and consistent? +. **Location** - Should this be on a node or relationship? + + +== Node Properties + +The following sections design the properties for each node type in the Northwind model: + + +=== Customer Node Properties + +From the `customers` table: + +[cols="1,1,1,2"] +|=== +| Column | Property | Type | Notes + +| `customer_id` +| `customerID` +| String +| Primary identifier - keep as-is (5-character code) + +| `company_name` +| `companyName` +| String +| Main display name + +| `contact_name` +| `contactName` +| String +| Person to contact + +| `contact_title` +| `contactTitle` +| String +| Job title of contact + +| `address` +| `address` +| String +| Street address + +| `city` +| `city` +| String +| City name + +| `region` +| `region` +| String +| State/province (nullable) + +| `postal_code` +| `postalCode` +| String +| ZIP/postal code + +| `country` +| `country` +| String +| Country name + +| `phone` +| `phone` +| String +| Phone number + +| `fax` +| `fax` +| String +| Fax number (nullable) + +|=== + + +=== Order Node Properties + +From the `orders` table: + +[cols="1,1,1,2"] +|=== +| Column | Property | Type | Notes + +| `order_id` +| `orderID` +| Integer +| Primary identifier + +| `order_date` +| `orderDate` +| Date +| When order was placed + +| `required_date` +| `requiredDate` +| Date +| Requested delivery date + +| `shipped_date` +| `shippedDate` +| Date +| Actual ship date (nullable) + +| `freight` +| `freight` +| Float +| Shipping cost + +| `ship_name` +| `shipName` +| String +| Recipient name + +| `ship_address` +| `shipAddress` +| String +| Delivery address + +| `ship_city` +| `shipCity` +| String +| Delivery city + +| `ship_region` +| `shipRegion` +| String +| Delivery region + +| `ship_postal_code` +| `shipPostalCode` +| String +| Delivery postal code + +| `ship_country` +| `shipCountry` +| String +| Delivery country + +|=== + +[NOTE] +.Foreign keys become relationships, not properties +==== +The `customer_id`, `employee_id`, and `ship_via` columns are foreign keys and will become relationships, not properties. +==== + + +=== Product Node Properties + +From the `products` table: + +[cols="1,1,1,2"] +|=== +| Column | Property | Type | Notes + +| `product_id` +| `productID` +| Integer +| Primary identifier + +| `product_name` +| `productName` +| String +| Product display name + +| `quantity_per_unit` +| `quantityPerUnit` +| String +| Package description + +| `unit_price` +| `unitPrice` +| Float +| Current price + +| `units_in_stock` +| `unitsInStock` +| Integer +| Current inventory + +| `units_on_order` +| `unitsOnOrder` +| Integer +| Pending orders + +| `reorder_level` +| `reorderLevel` +| Integer +| Minimum stock level + +| `discontinued` +| `discontinued` +| Boolean +| No longer sold flag + +|=== + + +=== Category Node Properties + +From the `categories` table: + +[cols="1,1,1,2"] +|=== +| Column | Property | Type | Notes + +| `category_id` +| `categoryID` +| Integer +| Primary identifier + +| `category_name` +| `categoryName` +| String +| Category display name + +| `description` +| `description` +| String +| Category description + +| `picture` +| _omit_ +| - +| Binary data - not suitable for graph storage + +|=== + + +=== Supplier Node Properties + +From the `suppliers` table: + +[cols="1,1,1,2"] +|=== +| Column | Property | Type | Notes + +| `supplier_id` +| `supplierID` +| Integer +| Primary identifier + +| `company_name` +| `companyName` +| String +| Supplier company name + +| `contact_name` +| `contactName` +| String +| Contact person + +| `contact_title` +| `contactTitle` +| String +| Contact job title + +| `address` +| `address` +| String +| Street address + +| `city` +| `city` +| String +| City + +| `region` +| `region` +| String +| State/province + +| `postal_code` +| `postalCode` +| String +| Postal code + +| `country` +| `country` +| String +| Country + +| `phone` +| `phone` +| String +| Phone number + +| `fax` +| `fax` +| String +| Fax number + +| `homepage` +| `homepage` +| String +| Website URL + +|=== + + +=== Employee Node Properties + +From the `employees` table: + +[cols="1,1,1,2"] +|=== +| Column | Property | Type | Notes + +| `employee_id` +| `employeeID` +| Integer +| Primary identifier + +| `last_name` +| `lastName` +| String +| Surname + +| `first_name` +| `firstName` +| String +| Given name + +| `title` +| `title` +| String +| Job title + +| `title_of_courtesy` +| `titleOfCourtesy` +| String +| Mr., Ms., etc. + +| `birth_date` +| `birthDate` +| Date +| Date of birth + +| `hire_date` +| `hireDate` +| Date +| Employment start date + +| `address` +| `address` +| String +| Home address + +| `city` +| `city` +| String +| City + +| `region` +| `region` +| String +| State/province + +| `postal_code` +| `postalCode` +| String +| Postal code + +| `country` +| `country` +| String +| Country + +| `home_phone` +| `homePhone` +| String +| Phone number + +| `extension` +| `extension` +| String +| Office extension + +| `notes` +| `notes` +| String +| Biography/notes + +| `photo` +| _omit_ +| - +| Binary data + +| `photo_path` +| _omit_ +| - +| Legacy file path + +|=== + + +=== Shipper Node Properties + +From the `shippers` table: + +[cols="1,1,1,2"] +|=== +| Column | Property | Type | Notes + +| `shipper_id` +| `shipperID` +| Integer +| Primary identifier + +| `company_name` +| `companyName` +| String +| Shipper company name + +| `phone` +| `phone` +| String +| Phone number + +|=== + + +== Relationship Properties + +The `CONTAINS` relationship (from `order_details`) has properties: + +[cols="1,1,1,2"] +|=== +| Column | Property | Type | Notes + +| `unit_price` +| `unitPrice` +| Float +| Price at time of order + +| `quantity` +| `quantity` +| Integer +| Number of units ordered + +| `discount` +| `discount` +| Float +| Discount percentage (0.0 to 1.0) + +|=== + +[NOTE] +.Relationship properties capture historical data +==== +The `unit_price` on the relationship may differ from the `unitPrice` on the Product node. The relationship property captures the historical price at the time of the order. +==== + + +== Property Naming Conventions + +Follow these conventions for consistency: + +[cols="1,2"] +|=== +| Convention | Example + +| camelCase +| `companyName`, `orderDate`, `unitPrice` + +| Descriptive names +| `shippedDate` not `sd` + +| Consistent prefixes +| All shipping fields use `ship` prefix + +| Boolean as adjectives +| `discontinued` not `isDiscontinued` + +|=== + + +== Data Type Mapping + +Map SQL data types to Neo4j types: + +[cols="1,1,2"] +|=== +| SQL Type | Neo4j Type | Notes + +| VARCHAR, TEXT +| String +| Text data + +| INTEGER, SMALLINT +| Integer +| Whole numbers + +| DECIMAL, REAL +| Float +| Decimal numbers + +| DATE, TIMESTAMP +| Date/DateTime +| Date and time values + +| BOOLEAN, BIT +| Boolean +| True/false values + +| BLOB, BYTEA +| _omit or external_ +| Binary data not ideal for graph storage + +|=== + + +[.quiz] +== Check Your Understanding + +include::questions/verify.adoc[leveloffset=+1] + + +[.summary] +== Summary + +In this lesson, you learned: + +* How to map relational columns to graph properties +* Property design for each Northwind node type +* How to handle relationship properties from junction tables +* Naming conventions and data type mappings + +In the next lesson, you will plan constraints and indexes for your graph model. diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/4-mapping-relationships/questions/verify.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/4-mapping-relationships/questions/verify.adoc new file mode 100644 index 000000000..f769472cc --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/4-mapping-relationships/questions/verify.adoc @@ -0,0 +1,24 @@ +[.question] += Junction Table Properties + +When the `order_details` junction table becomes a `CONTAINS` relationship, what happens to the `quantity`, `unit_price`, and `discount` columns? + +- [ ] They are lost during the transformation +- [ ] They become properties on the Order node +- [ ] They become properties on the Product node +- [x] They become properties on the CONTAINS relationship + + +[TIP,role=hint] +.Hint +==== +These values are specific to a particular order-product combination, not to the order or product alone. +==== + +[TIP,role=solution] +.Solution +==== +The `quantity`, `unit_price`, and `discount` columns become **properties on the CONTAINS relationship**. This is because these values describe the specific instance of a product within an order - the same product could have different quantities and prices in different orders. + +This is an advantage of graph databases: relationships can have properties, eliminating the need for junction tables. +==== diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/4-mapping-relationships/verify.cypher b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/4-mapping-relationships/verify.cypher new file mode 100644 index 000000000..a589cd25d --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/4-mapping-relationships/verify.cypher @@ -0,0 +1 @@ +MATCH (:Person)-[:DIRECTED]->(:Movie) RETURN true as outcome LIMIT 1 \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/images/add-index-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/images/add-index-annotated.png new file mode 100644 index 000000000..93d504147 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/images/add-index-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/images/add-index-select-property.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/images/add-index-select-property.png new file mode 100644 index 000000000..34c7bbdac Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/images/add-index-select-property.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/images/add-index.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/images/add-index.png new file mode 100644 index 000000000..51a543184 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/images/add-index.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/images/constraints-tab-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/images/constraints-tab-annotated.png new file mode 100644 index 000000000..157dc0451 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/images/constraints-tab-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/images/constraints-tab.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/images/constraints-tab.png new file mode 100644 index 000000000..535115dcf Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/images/constraints-tab.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/lesson.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/lesson.adoc new file mode 100644 index 000000000..cd712235b --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/lesson.adoc @@ -0,0 +1,356 @@ += Planning Constraints and Indexes +:order: 5 +:type: lesson + +In this lesson, you will plan constraints and indexes for your graph model. Constraints and indexes serve two purposes: they maintain data integrity by preventing duplicates, and they improve query performance by enabling efficient lookups. + + +== Why Constraints and Indexes Matter + +In relational databases, primary keys and foreign keys enforce data integrity. In Neo4j: + +* **Constraints** ensure data uniqueness and existence +* **Indexes** improve query performance for property lookups + +Planning these before import helps you: + +* Prevent duplicate nodes during import +* Enable efficient MERGE operations +* Optimize common query patterns + + +== Types of Constraints + +Neo4j supports several constraint types: + + +=== Unique Node Property Constraints + +Ensures a property value is unique across all nodes with a specific label. + +[source,cypher] +---- +CREATE CONSTRAINT customer_id_unique IF NOT EXISTS +FOR (c:Customer) REQUIRE c.customerID IS UNIQUE +---- + +This is equivalent to a primary key in relational databases. + + +=== Node Property Existence Constraints + +Ensures all nodes with a label have a specific property (Enterprise Edition only). + +[source,cypher] +---- +CREATE CONSTRAINT customer_name_exists IF NOT EXISTS +FOR (c:Customer) REQUIRE c.companyName IS NOT NULL +---- + + +=== Node Key Constraints + +Combines uniqueness and existence - the property must exist and be unique (Enterprise Edition only). + +[source,cypher] +---- +CREATE CONSTRAINT customer_key IF NOT EXISTS +FOR (c:Customer) REQUIRE c.customerID IS NODE KEY +---- + + +== Planning Constraints for Northwind + +Based on the relational primary keys, create these unique constraints: + +[cols="1,1,2"] +|=== +| Node Label | Property | Constraint Purpose + +| `Customer` +| `customerID` +| Unique identifier for customers + +| `Order` +| `orderID` +| Unique identifier for orders + +| `Product` +| `productID` +| Unique identifier for products + +| `Category` +| `categoryID` +| Unique identifier for categories + +| `Supplier` +| `supplierID` +| Unique identifier for suppliers + +| `Employee` +| `employeeID` +| Unique identifier for employees + +| `Shipper` +| `shipperID` +| Unique identifier for shippers + +|=== + + +=== Constraint Creation Script + +Run these Cypher statements to create the constraints: + +[source,cypher] +---- +// Customer constraint +CREATE CONSTRAINT customer_id_unique IF NOT EXISTS +FOR (c:Customer) REQUIRE c.customerID IS UNIQUE; + +// Order constraint +CREATE CONSTRAINT order_id_unique IF NOT EXISTS +FOR (o:Order) REQUIRE o.orderID IS UNIQUE; + +// Product constraint +CREATE CONSTRAINT product_id_unique IF NOT EXISTS +FOR (p:Product) REQUIRE p.productID IS UNIQUE; + +// Category constraint +CREATE CONSTRAINT category_id_unique IF NOT EXISTS +FOR (cat:Category) REQUIRE cat.categoryID IS UNIQUE; + +// Supplier constraint +CREATE CONSTRAINT supplier_id_unique IF NOT EXISTS +FOR (s:Supplier) REQUIRE s.supplierID IS UNIQUE; + +// Employee constraint +CREATE CONSTRAINT employee_id_unique IF NOT EXISTS +FOR (e:Employee) REQUIRE e.employeeID IS UNIQUE; + +// Shipper constraint +CREATE CONSTRAINT shipper_id_unique IF NOT EXISTS +FOR (sh:Shipper) REQUIRE sh.shipperID IS UNIQUE; +---- + + +== Types of Indexes + +Neo4j supports several index types: + + +=== Range Indexes + +The default index type, good for equality and range queries: + +[source,cypher] +---- +CREATE INDEX customer_country IF NOT EXISTS +FOR (c:Customer) ON (c.country) +---- + + +=== Text Indexes + +Optimized for text search operations: + +[source,cypher] +---- +CREATE TEXT INDEX product_name_text IF NOT EXISTS +FOR (p:Product) ON (p.productName) +---- + + +=== Composite Indexes + +Index on multiple properties: + +[source,cypher] +---- +CREATE INDEX customer_city_country IF NOT EXISTS +FOR (c:Customer) ON (c.city, c.country) +---- + + +== Planning Indexes for Northwind + +Consider your query patterns when planning indexes. Common Northwind queries might include: + + +=== Customer Queries + +* Find customers by country +* Find customers by city +* Search customers by company name + +[source,cypher] +---- +// Index for country-based queries +CREATE INDEX customer_country IF NOT EXISTS +FOR (c:Customer) ON (c.country); + +// Index for city-based queries +CREATE INDEX customer_city IF NOT EXISTS +FOR (c:Customer) ON (c.city); + +// Text index for company name search +CREATE TEXT INDEX customer_company_text IF NOT EXISTS +FOR (c:Customer) ON (c.companyName); +---- + + +=== Product Queries + +* Find products by name +* Find discontinued products +* Find products by price range + +[source,cypher] +---- +// Text index for product name search +CREATE TEXT INDEX product_name_text IF NOT EXISTS +FOR (p:Product) ON (p.productName); + +// Index for discontinued filter +CREATE INDEX product_discontinued IF NOT EXISTS +FOR (p:Product) ON (p.discontinued); + +// Index for price queries +CREATE INDEX product_price IF NOT EXISTS +FOR (p:Product) ON (p.unitPrice); +---- + + +=== Order Queries + +* Find orders by date +* Find orders by ship country + +[source,cypher] +---- +// Index for date-based queries +CREATE INDEX order_date IF NOT EXISTS +FOR (o:Order) ON (o.orderDate); + +// Index for shipping queries +CREATE INDEX order_ship_country IF NOT EXISTS +FOR (o:Order) ON (o.shipCountry); +---- + + +=== Employee Queries + +* Find employees by name + +[source,cypher] +---- +// Index for employee name lookup +CREATE INDEX employee_lastname IF NOT EXISTS +FOR (e:Employee) ON (e.lastName); +---- + + +== Complete Index Creation Script + +[source,cypher] +---- +// Customer indexes +CREATE INDEX customer_country IF NOT EXISTS +FOR (c:Customer) ON (c.country); + +CREATE INDEX customer_city IF NOT EXISTS +FOR (c:Customer) ON (c.city); + +CREATE TEXT INDEX customer_company_text IF NOT EXISTS +FOR (c:Customer) ON (c.companyName); + +// Product indexes +CREATE TEXT INDEX product_name_text IF NOT EXISTS +FOR (p:Product) ON (p.productName); + +CREATE INDEX product_discontinued IF NOT EXISTS +FOR (p:Product) ON (p.discontinued); + +CREATE INDEX product_price IF NOT EXISTS +FOR (p:Product) ON (p.unitPrice); + +// Order indexes +CREATE INDEX order_date IF NOT EXISTS +FOR (o:Order) ON (o.orderDate); + +CREATE INDEX order_ship_country IF NOT EXISTS +FOR (o:Order) ON (o.shipCountry); + +// Employee indexes +CREATE INDEX employee_lastname IF NOT EXISTS +FOR (e:Employee) ON (e.lastName); + +// Category indexes +CREATE TEXT INDEX category_name_text IF NOT EXISTS +FOR (cat:Category) ON (cat.categoryName); +---- + + +== Viewing Constraints and Indexes + +After creating constraints and indexes, verify them: + +[source,cypher] +---- +// Show all constraints +SHOW CONSTRAINTS; + +// Show all indexes +SHOW INDEXES; +---- + +// TODO: Add screenshot of SHOW CONSTRAINTS output + +// TODO: Add screenshot of SHOW INDEXES output + + +== Best Practices + +. **Create constraints before importing data** - This ensures uniqueness from the start and enables efficient MERGE operations + +. **Create indexes after importing data** - For large imports, creating indexes afterward can be faster + +. **Index properties used in WHERE clauses** - Focus on properties you filter by frequently + +. **Avoid over-indexing** - Each index adds storage and maintenance overhead + +. **Use composite indexes for multi-property queries** - When you frequently query by multiple properties together + + +== Organizing Your Queries in Neo4j Aura + +In Neo4j Aura, you can create folders to organize saved queries. For the constraint and index scripts in this lesson, create the following folder structure: + +* **Folder: `01-Setup-Constraints`** - Save the constraint creation script here. These queries run first, before any data import. +* **Folder: `02-Setup-Indexes`** - Save the index creation script here. Run these after importing data. +* **Folder: `Admin-Verification`** - Save the `SHOW CONSTRAINTS` and `SHOW INDEXES` queries here for ongoing maintenance. + +[TIP] +.Bookmark the constraint and index scripts +==== +Bookmark this lesson. The constraint and index scripts are reference material you will return to when setting up new Neo4j databases or troubleshooting import issues. +==== + + +[.quiz] +== Check Your Understanding + +include::questions/1-unique-id.adoc[leveloffset=+1] + + +[.summary] +== Summary + +In this lesson, you learned: + +* The types of constraints available in Neo4j +* How to plan unique constraints based on relational primary keys +* How to design indexes for common query patterns +* Best practices for constraint and index creation + +In the next lesson, you will have the opportunity to practice designing a graph model in an optional hands-on workshop. diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/questions/1-unique-id.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/questions/1-unique-id.adoc new file mode 100644 index 000000000..9162d9aa9 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/5-planning-validation/questions/1-unique-id.adoc @@ -0,0 +1,28 @@ +[.question] += Constraints and Indexes + +Why should you create unique constraints on node identifier properties before importing data? + +- [ ] To make queries run faster +- [ ] To enable full-text search +- [x] To prevent duplicate nodes and enable efficient MERGE operations +- [ ] Constraints are only needed after import + + +[TIP,role=hint] +.Hint +==== +Think about what happens when you import the same data twice, or when you need to match existing nodes during relationship creation. +==== + +[TIP,role=solution] +.Solution +==== +Creating unique constraints before importing data serves two purposes: + +1. **Prevents duplicate nodes** - If you accidentally run the import twice, the constraint will prevent creating duplicate nodes with the same identifier. + +2. **Enables efficient MERGE operations** - When creating relationships, Neo4j uses MERGE to find or create nodes. A unique constraint with its backing index makes these lookups very fast. + +Without constraints, you might end up with duplicate data and slow import performance. +==== diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-nodes.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-nodes.png new file mode 100644 index 000000000..c523feeee Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-nodes.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-nodes.svg b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-nodes.svg new file mode 100644 index 000000000..c4ce55d8d --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-nodes.svg @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + ACTED_IN + + + + + + + role: + + + + + + + + + + + + + + Movie + + + + + + + + + + + + Person + + + + + diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-rel.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-rel.png new file mode 100644 index 000000000..450a678b7 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-rel.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-rel.svg b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-rel.svg new file mode 100644 index 000000000..0674a400a --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-rel.svg @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + ACTED_IN + + + + + + + role: + + + + + + + + + + + + + Movie + + + + + + + + + + + + Person + + + + + diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-role.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-role.png new file mode 100644 index 000000000..741e4790c Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-role.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-role.svg b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-role.svg new file mode 100644 index 000000000..5cf997862 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-highlighted-role.svg @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + ACTED_IN + + + + + + + role: + + + + + + + + + + + + + Movie + + + + + + + + + + + + Person + + + + + diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-relationship.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-relationship.png new file mode 100644 index 000000000..6567b0870 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in-relationship.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in.png b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in.png new file mode 100644 index 000000000..bdd905dce Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in.svg b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in.svg new file mode 100644 index 000000000..3ac5996fb --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/acted_in.svg @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + ACTED_IN + + + + + + + role: + + + + + + + + + + + + + + + Movie + + + + + + + + + + + + + + Person + + + + + + + diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/create-relationship.gif b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/create-relationship.gif new file mode 100644 index 000000000..c04d3ebd7 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/create-relationship.gif differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/toy-story.svg b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/toy-story.svg new file mode 100644 index 000000000..f1f877ad8 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/images/toy-story.svg @@ -0,0 +1 @@ +Neo4j Graph VisualizationCreated using Neo4j (http://www.neo4j.com/)ACTED_INACTED_INACTED_INACTED_IN Tim Allen Toy Story Don Rickles Tom Hanks Jim Varney \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/lesson.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/lesson.adoc new file mode 100644 index 000000000..53258bd6c --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/lesson.adoc @@ -0,0 +1,366 @@ += Modelling Workshop +:order: 6 +:type: lesson +:optional: true + +[NOTE] +.Optional Lesson +==== +This lesson is an optional hands-on workshop. You can skip it and continue to the next module, or use it to practice and reinforce your graph modelling skills. +==== + +In this workshop, you will practice designing a graph model by working through the Northwind schema step by step. You can use either Arrows.app or the Neo4j Data Importer in Aura. + + +== Workshop Overview + +In the previous lessons, you learned the theory of transforming relational schemas to graph models. Now you will apply those concepts hands-on by: + +. Creating a visual graph model +. Documenting your node labels and properties +. Defining relationships and their properties +. Validating your model against the relational schema + + +== Choose Your Tool + +You can complete this workshop using either of these tools: + + +=== Option A: Arrows.app (Standalone) + +link:https://arrows.app[Arrows.app^] is a free, browser-based tool for designing Neo4j graph models. Use this option if you want to focus purely on data modelling without connecting to a database. + +**Advantages:** + +* No database connection required +* Export models as images, Cypher, or JSON +* Share models via URL + + +=== Option B: Neo4j Data Importer (Aura) + +The Neo4j Data Importer is built into AuraDB and provides a visual modelling canvas alongside the import functionality. Use this option if you want to model and import in one workflow. + +**To access the Data Importer:** + +. Log in to link:https://console.neo4j.io[Neo4j Aura^] +. Open your AuraDB instance +. Click **Import** in the left sidebar +. Use the visual canvas to define nodes and relationships + +**Advantages:** + +* Model and import in one tool +* Direct connection to your database +* Validate mappings against your data source + +[TIP] +.Same concepts, different tools +==== +The modelling concepts are the same regardless of which tool you use. Both tools allow you to define node labels, properties, and relationships visually. The exercises below provide instructions for both tools. +==== + + +== Getting Started with Neo4j Data Importer (Aura) + +If you chose the Data Importer in Aura: + +=== Step 1: Access the Data Importer + +. Log in to link:https://console.neo4j.io[Neo4j Aura^] +. Open your AuraDB instance +. Click **Import** in the left sidebar + +=== Step 2: Upload Your Data Files + +. In the **Files** panel on the left, click **Browse** or drag and drop your CSV files +. The Northwind CSV files are available at: link:https://github.com/neo4j-graph-examples/northwind/tree/main/import[Northwind CSV files^] +. Upload the files you need: `customers.csv`, `orders.csv`, `products.csv`, `categories.csv`, `suppliers.csv`, `employees.csv`, `shippers.csv`, `order-details.csv` + +=== Step 3: Create a Node + +. Click the **Add node label** button on the canvas +. Enter a label name (e.g., `Customer`) +. In the **Definition** panel, select the corresponding CSV file +. Click **Map from file** to map CSV columns to node properties +. Select the columns you want to import and click **Confirm** + +=== Step 4: Set the Unique Identifier + +. In the properties list, find the ID property (e.g., `customerID`) +. Click the **key icon** next to it to set it as the unique identifier +. This creates a constraint and index for efficient lookups + +=== Step 5: Create a Relationship + +. Hover over the edge of a source node until you see the **+** icon +. Drag from the source node to the target node +. Enter the relationship type (e.g., `PLACED`) +. Map the **From** and **To** IDs using the CSV columns +. Optionally add relationship properties from the CSV + +=== Step 6: Run the Import + +. Once your model is complete, click **Run import** +. The Data Importer will create nodes and relationships in your database +. Review the import summary to verify the results + +[NOTE] +.Data Importer saves automatically +==== +Data Importer saves your model automatically. You can also download your model using the **...** menu > **Download model (with data)** to back up your work or share it with others. +==== + + +== Getting Started with Arrows.app + +If you chose Arrows.app: + +=== Step 1: Open Arrows.app + +. Navigate to link:https://arrows.app[https://arrows.app^] +. You will see a blank canvas for creating your model + +// TODO: Add screenshot of Arrows.app blank canvas + +=== Step 2: Create Your First Node + +. Click anywhere on the canvas to create a node +. Double-click the node to edit its label +. Enter `Customer` as the label + +// TODO: Add screenshot showing node creation + + +== Exercise 1: Create the Core Nodes + +Create nodes for each of the main entities in the Northwind database: + +[%interactive] +* [ ] `Customer` node +* [ ] `Order` node +* [ ] `Product` node +* [ ] `Category` node +* [ ] `Supplier` node +* [ ] `Employee` node +* [ ] `Shipper` node + +Arrange them on the canvas in a way that makes logical sense. A suggested layout: + +* Place `Customer` on the left +* Place `Order` in the center +* Place `Product` on the right +* Place `Employee` above `Order` +* Place `Category` and `Supplier` near `Product` +* Place `Shipper` below `Order` + +// TODO: Add screenshot of arranged nodes + + +== Exercise 2: Add Node Properties + +For each node, add the main properties. In Arrows.app: + +. Select a node +. Use the properties panel to add properties +. Focus on the most important properties for now + +=== Customer Properties + +Add these properties to the `Customer` node: + +[%interactive] +* [ ] `customerID` (String) - identifier +* [ ] `companyName` (String) +* [ ] `contactName` (String) +* [ ] `city` (String) +* [ ] `country` (String) + +// TODO: Add screenshot of Customer node with properties + +=== Order Properties + +Add these properties to the `Order` node: + +[%interactive] +* [ ] `orderID` (Integer) - identifier +* [ ] `orderDate` (Date) +* [ ] `shippedDate` (Date) +* [ ] `freight` (Float) + +=== Product Properties + +Add these properties to the `Product` node: + +[%interactive] +* [ ] `productID` (Integer) - identifier +* [ ] `productName` (String) +* [ ] `unitPrice` (Float) +* [ ] `discontinued` (Boolean) + +=== Continue with Other Nodes + +Add main properties to the remaining nodes: + +**Category:** +[%interactive] +* [ ] `categoryID`, `categoryName`, `description` + +**Supplier:** +[%interactive] +* [ ] `supplierID`, `companyName`, `country` + +**Employee:** +[%interactive] +* [ ] `employeeID`, `firstName`, `lastName`, `title` + +**Shipper:** +[%interactive] +* [ ] `shipperID`, `companyName`, `phone` + + +== Exercise 3: Create Relationships + +Now connect the nodes with relationships. In Arrows.app: + +. Click on the source node +. Drag to the target node to create a relationship +. Double-click the relationship to set its type + +=== Customer to Order + +Create a relationship from `Customer` to `Order`: + +. Click on `Customer` +. Drag to `Order` +. Set the relationship type to `PLACED` + +// TODO: Add screenshot of PLACED relationship + +=== Employee to Order + +[%interactive] +* [ ] Create `PROCESSED` relationship from `Employee` to `Order` + +=== Order to Shipper + +[%interactive] +* [ ] Create `SHIPPED_BY` relationship from `Order` to `Shipper` + +=== Order to Product + +[%interactive] +* [ ] Create `CONTAINS` relationship from `Order` to `Product` +* [ ] Add properties: `quantity`, `unitPrice`, `discount` + +// TODO: Add screenshot showing relationship with properties + +=== Product Relationships + +[%interactive] +* [ ] Create `IN_CATEGORY` relationship from `Product` to `Category` +* [ ] Create `SUPPLIES` relationship from `Supplier` to `Product` + +=== Employee Hierarchy + +[%interactive] +* [ ] Create `REPORTS_TO` relationship from `Employee` to `Employee` (self-referencing) + +// TODO: Add screenshot of self-referencing relationship + + +== Exercise 4: Review Your Model + +Your completed model should look similar to this: + +// TODO: Add screenshot of complete Arrows.app model + +=== Model Checklist + +Verify your model includes: + +[%interactive] +* [ ] 7 node types (Customer, Order, Product, Category, Supplier, Employee, Shipper) +* [ ] 7 relationship types (PLACED, PROCESSED, SHIPPED_BY, CONTAINS, IN_CATEGORY, SUPPLIES, REPORTS_TO) +* [ ] Main properties on each node +* [ ] Properties on the CONTAINS relationship + + +== Exercise 5: Export Your Model + +Arrows.app allows you to export your model in several formats: + +=== Export as Image + +. Click the menu icon (three lines) +. Select **Export** +. Choose **PNG** or **SVG** for documentation + +// TODO: Add screenshot of export menu + +=== Export as Cypher + +. Click **Export** +. Choose **Cypher** to generate CREATE statements +. This gives you a starting point for creating your schema + +=== Export as JSON + +. Click **Export** +. Choose **JSON** to save your model +. You can reload this later to continue editing + + +== Experiment Further + +Try these additional exercises to deepen your understanding: + + +=== Alternative Relationship Directions + +Experiment with different relationship directions: + +* Instead of `(Customer)-[:PLACED]->(Order)`, try `(Order)-[:PLACED_BY]->(Customer)` +* Consider how this affects query readability + + +=== Add Territory Data + +Extend your model to include territories: + +. Add a `Territory` node +. Add a `Region` node +. Create `ASSIGNED_TO` relationship from `Employee` to `Territory` +. Create `IN_REGION` relationship from `Territory` to `Region` + + +=== Model Order Details as Nodes + +Instead of the `CONTAINS` relationship, try modelling `OrderDetail` as a node: + +. Create an `OrderDetail` node +. Create `HAS_DETAIL` from `Order` to `OrderDetail` +. Create `FOR_PRODUCT` from `OrderDetail` to `Product` + +Compare this approach to using relationship properties. When might each be appropriate? + + +== Workshop Summary + +In this workshop, you practiced: + +* Using visual tools (Arrows.app or Neo4j Data Importer) to design graph models +* Creating nodes with labels and properties +* Defining relationships with types and properties +* Exporting your model for documentation and implementation + +Your model is now ready to guide the data import process in the next module. + + +[.summary] +== Summary + +This optional workshop provided hands-on practice with graph modelling tools. You created a visual representation of the Northwind graph model that you will implement in the following modules. + +In the next module, you will use the Neo4j Data Importer to import the Northwind data into Neo4j. diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/questions/1-relationship-properties.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/questions/1-relationship-properties.adoc new file mode 100644 index 000000000..57f7e158d --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/lessons/6-modelling-workshop/questions/1-relationship-properties.adoc @@ -0,0 +1,36 @@ +[.question] += Graph Model Design + +In the Northwind graph model, how is the employee management hierarchy represented? + +- [ ] A `Manager` label on some Employee nodes +- [ ] A separate `Manager` node type +- [x] A `REPORTS_TO` relationship from Employee to Employee +- [ ] A `managerId` property on Employee nodes + + +[TIP,role=hint] +.Hint +==== +Think about how the `reports_to` column in the relational `employees` table references another employee. +==== + +[TIP,role=solution] +.Solution +==== +The employee management hierarchy is represented as a **self-referencing `REPORTS_TO` relationship** from Employee to Employee. + +This pattern: +- `(Employee)-[:REPORTS_TO]->(Employee)` + +Allows you to traverse the entire management chain with queries like: + +[source,cypher] +---- +MATCH path = (e:Employee)-[:REPORTS_TO*]->(manager:Employee) +WHERE e.firstName = 'Nancy' +RETURN path +---- + +This eliminates the need to store a `managerId` property and perform table joins. +==== diff --git a/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/module.adoc b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/module.adoc new file mode 100644 index 000000000..2b9dd19f1 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/2-modelling/module.adoc @@ -0,0 +1,15 @@ += Designing the Graph Model +:order: 2 + +In this module, you will analyze a relational database schema and design a graph data model for it. + +You will work with the Northwind database and learn to: + +* Analyze the relational schema and understand table relationships +* Identify which tables should become nodes in the graph +* Map foreign key relationships to graph relationships +* Design node and relationship properties +* Plan constraints and indexes for data integrity and performance + + +link:./1-connecting-to-postgres/[Ready? Let's go →, role=btn] diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/1-aura-setup/lesson.adoc b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/1-aura-setup/lesson.adoc new file mode 100644 index 000000000..2995f7af2 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/1-aura-setup/lesson.adoc @@ -0,0 +1,114 @@ += Understanding the source data +:order: 1 +:type: lesson + +Before you start importing data, you should take time to understand the data you are working with, including: + +* The data format and structure +* The frequency of updates +* Data quality +* Uniquely identifying data + +These factors will influence the process you take to import the data into Neo4j. + +== Choosing Your Import Environment + +You have two options for importing data in this course: + +=== Option A: Neo4j Aura (Recommended) + +Neo4j Aura provides a cloud-hosted database with the Data Importer built in. + +. Log in to Neo4j Aura at `console.neo4j.io` +. Create a new AuraDB Professional instance (free tier available, no credit card required) +. Once the instance is running, click **Import** in the left sidebar +. The Data Importer opens, ready to upload CSV files and design your graph model + +[TIP] +.Why AuraDB Professional? +==== +AuraDB Professional provides additional features like Graph Data Science algorithms that you may want to explore after importing your data. The free tier is sufficient for this course. +==== + +=== Option B: GraphAcademy Sandbox + +A sandbox was created for you when you enrolled in this course. You can use the Neo4j Workspace Data Importer to connect to it. + +. Open Neo4j Workspace Data Importer at `workspace.neo4j.io/workspace/import` +. Click **Connect** and enter your sandbox credentials: ++ +Connection URL:: [copy]#{instance-host}:{instance-boltPort}# +Username:: [copy]#{instance-username}# +Password:: [copy]#{instance-password}# +. Click **Connect** to access the Data Importer + +[NOTE] +.Sandbox limitations +==== +The sandbox is temporary and resets periodically. For a persistent environment, use Aura. +==== + +== Data Structure and Format + +How the data is formatted may influence how you import the data into Neo4j. + +For example, if the source data is in a propriety data format, you may need to write a custom script to extract the data before importing it. Do you need to use a specific tool or technology? Alternatively, the data may be in a format you can import directly, such as CSV or JSON. + +The data structure will influence the complexity of the import process. + +The data may be normalized or de-normalized. If de-normalized, you must understand how to transform the data before importing it. Do you have to split the data into multiple nodes or relationships? If normalized, are the entities correct for the graph data model you are implementing? + +== Frequency + +How often the source data is updated will affect your import strategy and process. + +Do you need to import the data once, or will you need to import data regularly? +Are updates incremental, or must you import the entire dataset each time? + +Are updates real-time or batched? +Would an event-driven architecture, where you stream updates from the source, be appropriate? +Or would a simple batch import process fulfill the requirement? + +== Data Quality + +Whether you need to clean the data before importing will depend on the quality of the data in the source, the data model you are implementing, and your requirements. + +You should assess the source data for accuracy, validity, completeness, reliability, and consistency: + +* Accuracy - verify that the data is correct and error-free by cross-referencing with reliable sources. +* Validity - Ensure the data is applicable and suitable for the intended use or context. +* Completeness - Check that you included all necessary data and there are no missing elements. +* Reliability - Ascertain that the data comes from a credible and dependable source. +* Consistency - Confirm that the data does not show discrepancies when compared over time or with similar datasets. + +Some common issues with data format you should also check include: + +* Are quotes used correctly? +* Are entities and values of the correct data type? +* Are UTF-8 prefixes used (for example \uc)? +* Do some fields have trailing spaces? +* Do the fields contain binary zeros? +* Are lists formed correctly? +* Any obvious typos? + +== Uniquely identifying data + +A Neo4j best practice is to use an ID as a unique property value for each node. +Do all the entities in the source data have a unique identifier? + +For example, if you are importing sales data into `Customer` and `Product` nodes, is there a unique identifier (ID) for each customer and product? + +If the IDs in your source data are not unique for the same entity (node), you will have problems loading the data and creating relationships between existing nodes. + + +[.quiz] +== Check Your Understanding + +include::questions/1-data-quality.adoc[leveloffset=+1] + +[.summary] +== Summary + +In this lesson, you learned the importance of understanding the source data before importing it into Neo4j. + +In the next lesson, you will explore the implications of the graph data model you will implement during the import. \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/1-aura-setup/questions/1-data-quality.adoc b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/1-aura-setup/questions/1-data-quality.adoc new file mode 100644 index 000000000..0a142e813 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/1-aura-setup/questions/1-data-quality.adoc @@ -0,0 +1,24 @@ +[.question] += Number of properties + +What aspect of data quality ensures that data is suitable and applicable for its intended use or context? (select all that apply) + +- [x] Accuracy +- [x] Validity +- [x] Completeness +- [x] Reliability +- [x] Consistency + + +[TIP,role=hint] +.Hint +==== +It is important you assess data quality against multiple factors. +==== + +[TIP,role=solution] +.Solution +==== +Accuracy, validity, completeness, reliability, and consistency are *all* important aspects of data quality. +==== + diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/2-extracting-data/images/arrows-example.json b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/2-extracting-data/images/arrows-example.json new file mode 100644 index 000000000..d264ccd7d --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/2-extracting-data/images/arrows-example.json @@ -0,0 +1,140 @@ +{ + "style": { + "font-family": "sans-serif", + "background-color": "#ffffff", + "background-image": "", + "background-size": "100%", + "node-color": "#ffffff", + "border-width": 4, + "border-color": "#000000", + "radius": 50, + "node-padding": 5, + "node-margin": 2, + "outside-position": "auto", + "node-icon-image": "", + "node-background-image": "", + "icon-position": "inside", + "icon-size": 64, + "caption-position": "inside", + "caption-max-width": 200, + "caption-color": "#000000", + "caption-font-size": 50, + "caption-font-weight": "normal", + "label-position": "inside", + "label-display": "pill", + "label-color": "#000000", + "label-background-color": "#ffffff", + "label-border-color": "#000000", + "label-border-width": 4, + "label-font-size": 40, + "label-padding": 5, + "label-margin": 4, + "directionality": "directed", + "detail-position": "inline", + "detail-orientation": "parallel", + "arrow-width": 5, + "arrow-color": "#000000", + "margin-start": 5, + "margin-end": 5, + "margin-peer": 20, + "attachment-start": "normal", + "attachment-end": "normal", + "relationship-icon-image": "", + "type-color": "#000000", + "type-background-color": "#ffffff", + "type-border-color": "#000000", + "type-border-width": 0, + "type-font-size": 16, + "type-padding": 5, + "property-position": "outside", + "property-alignment": "colon", + "property-color": "#000000", + "property-font-size": 16, + "property-font-weight": "normal" + }, + "nodes": [ + { + "id": "n0", + "position": { + "x": -146, + "y": -8 + }, + "caption": "", + "style": {}, + "labels": [ + "Customer" + ], + "properties": { + "id": "", + "name": "", + "email": "", + "address": "" + } + }, + { + "id": "n1", + "position": { + "x": -146, + "y": 292 + }, + "caption": "", + "style": {}, + "labels": [ + "Product" + ], + "properties": { + "id": "", + "name": "", + "price": "" + } + }, + { + "id": "n2", + "position": { + "x": 154, + "y": -8 + }, + "caption": "", + "style": {}, + "labels": [ + "Order" + ], + "properties": { + "id": "", + "date": "" + } + } + ], + "relationships": [ + { + "id": "n0", + "type": "PURCHASED", + "style": { + "detail-orientation": "horizontal" + }, + "properties": {}, + "fromId": "n0", + "toId": "n1" + }, + { + "id": "n1", + "type": "PLACED", + "style": {}, + "properties": {}, + "fromId": "n0", + "toId": "n2" + }, + { + "id": "n2", + "type": "CONTAINS", + "style": { + "detail-orientation": "horizontal" + }, + "properties": { + "quantity": "" + }, + "fromId": "n2", + "toId": "n1" + } + ] +} \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/2-extracting-data/images/arrows-example.svg b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/2-extracting-data/images/arrows-example.svg new file mode 100644 index 000000000..2ae900262 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/2-extracting-data/images/arrows-example.svg @@ -0,0 +1 @@ +PURCHASEDPLACEDCONTAINSquantity:Customerid:name:email:address:Productid:name:price:Orderid:date: \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/2-extracting-data/images/arrows.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/2-extracting-data/images/arrows.png new file mode 100644 index 000000000..4d7ca8cb5 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/2-extracting-data/images/arrows.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/2-extracting-data/lesson.adoc b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/2-extracting-data/lesson.adoc new file mode 100644 index 000000000..627513fdf --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/2-extracting-data/lesson.adoc @@ -0,0 +1,155 @@ += Developing a data model +:order: 2 +:type: lesson + +In the last lesson, you learned the importance of understanding the source data before importing it into Neo4j. + +In this lesson, you will see how the data model influences and directs the import process. + +Before you create data within Neo4j, there is no data model. +Neo4j is _schema-optional_ and allows you to create data without a predefined schema. +You create the data model as you import data into Neo4j. + +As a result, your import process will also define the data model. +As you import data, you create nodes and relationships, dynamically forming the data model. + +[IMPORTANT] +.Design for your objectives, not for the source structure +==== +You should not let the source data structure dictate the graph data model. +Instead, build a data model that works for your project's objectives. + +Create an import process that transforms the source data into a graph data model; do not create a model that fits the source data. +==== + + +== Common Import Misconceptions + +When extracting and preparing data for import, avoid these common mistakes: + +[IMPORTANT] +.Misconception 1: "Export all columns from every table" +==== +**Wrong:** Extracting every column from the relational database. + +**Reality:** Only extract columns that will become: +* Node properties you actually need +* Relationship properties +* Foreign keys needed to create relationships + +Columns like `created_at`, `updated_at`, or internal flags may not be needed in the graph. +==== + +[IMPORTANT] +.Misconception 2: "Keep the same column names as properties" +==== +**Wrong:** Using SQL column names directly as Neo4j property names. + +**Reality:** Transform column names to follow Neo4j conventions: +* Use camelCase: `company_name` → `companyName` +* Remove prefixes: `customer_id` → `customerID` or just use as identifier +* Make names meaningful: `ship_via` → relationship to Shipper, not a property +==== + +[IMPORTANT] +.Misconception 3: "Import everything in one step" +==== +**Wrong:** Trying to import all data, nodes, and relationships in a single operation. + +**Reality:** Import in phases: +1. Create constraints first +2. Import nodes (one label at a time) +3. Create relationships (after all referenced nodes exist) + +This ensures referential integrity and better error handling. +==== + +[IMPORTANT] +.Misconception 4: "CSV structure must match the final graph structure" +==== +**Wrong:** Assuming you need one CSV file per node type with exact property names. + +**Reality:** You can: +* Transform data during import using Cypher +* Use a single CSV to create multiple node types +* Derive properties from combinations of columns +* Skip columns you do not need +==== + +== Modelling + +You have two options for developing your graph data model visually: + +=== Option A: Neo4j Data Importer (Aura) + +If you are using Aura, the Data Importer provides built-in modelling: + +. Open your AuraDB instance and click **Import** +. Add node labels by clicking **Add node label** on the canvas +. Drag between nodes to create relationships +. The model is automatically saved and can be exported + +The Data Importer combines modelling and import in one tool - you design the model and import data in the same interface. + +=== Option B: Arrows.app + +link:https://arrows.app/[Arrows^] is a standalone tool for creating graph data models. + +image::images/arrows.png[A screenshot of the Arrows user interface] + +Arrows allows you to create a visual representation of the data model. Arrows supports: + +* Creation of nodes, relationships, properties, and labels +* Styling including colors, sizes, and layouts +* Export as an image or Cypher + +[TIP] +.When to use which tool +==== +* **Data Importer** - Best when you want to model and import in one step +* **Arrows.app** - Best for creating documentation, sharing models, or planning before import +==== + +[%collapsible] +.Optional arrows activity +==== +Use link:https://arrows.app/[Arrows^] to create a simple data model. + +The data model should include the following nodes, properties, and relationships: + +* Node labels - `Customer`, `Product`, `Order` +* Relationships +** `Customer` - `PURCHASED` -> `Product` +** `Customer` - `PLACED` -> `Order` +** `Order` - `CONTAINS` -> `Product` +* Properties +** `Customer` - `id`, `name`, `email`, `address` +** `Product` - `id`, `name`, `price` +** `Order` - `id`, `date` +** `CONTAINS` - `quantity` + +image:images/arrows-example.svg[The above data model created in Arrows] +==== + +The data model in Neo4j is flexible and can evolve as you import data. +Neo4j supports a schema-less approach, allowing you to create data without a predefined schema. + +== Data types + +As part of your data modeling and import process, you should consider data types and how you will represent them in Neo4j. + +Neo4j supports a range of data types, including `BOOLEAN`, `DATE`, `DURATION`, `FLOAT`, `INTEGER`, `LIST`, `LOCAL DATETIME`, `LOCAL TIME`, `POINT`, `STRING`, `ZONED DATETIME`, and `ZONED TIME`. + +You can learn more about Neo4j data types in the link:https://neo4j.com/docs/cypher-manual/current/values-and-types/[Neo4j documentation^]. + +[.quiz] +== Check Your Understanding + +include::questions/1-data-model.adoc[leveloffset=+1] + +[.summary] +== Summary + +In this lesson, you explored how the data model influences how you import data into Neo4j. + +In the next optional challenge, you will import your own data into Neo4j. \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/2-extracting-data/questions/1-data-model.adoc b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/2-extracting-data/questions/1-data-model.adoc new file mode 100644 index 000000000..c9f0b8d44 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/2-extracting-data/questions/1-data-model.adoc @@ -0,0 +1,19 @@ +[.question] += Data Model + +True or False - A data model has to exist before you can import data into Neo4j. + +- [ ] True +- [*] False + +[TIP,role=hint] +.Hint +==== +Neo4j is _schema-optional_ and allows you to create data without a predefined schema. +==== + +[TIP,role=solution] +.Solution +==== +The statement is False - You create the data model as you import data into Neo4j. +==== \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_connect.jpg b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_connect.jpg new file mode 100644 index 000000000..5613000cc Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_connect.jpg differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_drop.jpg b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_drop.jpg new file mode 100644 index 000000000..2df74439a Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_drop.jpg differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_main.jpg b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_main.jpg new file mode 100644 index 000000000..c4c488767 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_main.jpg differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_manual.jpg b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_manual.jpg new file mode 100644 index 000000000..9161a53ba Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_manual.jpg differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_actedin.jpg b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_actedin.jpg new file mode 100644 index 000000000..26b562b15 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_actedin.jpg differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_blank.jpg b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_blank.jpg new file mode 100644 index 000000000..5edacb858 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_blank.jpg differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_movie.jpg b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_movie.jpg new file mode 100644 index 000000000..b1a85f03e Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_movie.jpg differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_named.jpg b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_named.jpg new file mode 100644 index 000000000..852a885ae Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_named.jpg differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_person.jpg b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_person.jpg new file mode 100644 index 000000000..ff170bc29 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_person.jpg differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_untitled.jpg b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_untitled.jpg new file mode 100644 index 000000000..ea4f785f3 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_model_untitled.jpg differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_result.jpg b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_result.jpg new file mode 100644 index 000000000..4ae56d67a Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_result.jpg differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_source.jpg b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_source.jpg new file mode 100644 index 000000000..0fc64fbc2 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/01_data_importer_source.jpg differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/add-node-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/add-node-annotated.png new file mode 100644 index 000000000..ba45e59eb Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/add-node-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/add-node.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/add-node.png new file mode 100644 index 000000000..ee4e8c96a Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/add-node.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/clear-model-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/clear-model-annotated.png new file mode 100644 index 000000000..731efc5f4 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/clear-model-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/clear-model.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/clear-model.png new file mode 100644 index 000000000..d70b42697 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/clear-model.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/connect-dialog.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/connect-dialog.png new file mode 100644 index 000000000..f35cac506 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/connect-dialog.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/data-importer-connect-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/data-importer-connect-annotated.png new file mode 100644 index 000000000..37b218c7c Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/data-importer-connect-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/data-importer-connect.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/data-importer-connect.png new file mode 100644 index 000000000..25666f53d Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/data-importer-connect.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/data-importer.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/data-importer.png new file mode 100644 index 000000000..128841a40 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/data-importer.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/download-model-data-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/download-model-data-annotated.png new file mode 100644 index 000000000..3364514f5 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/download-model-data-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/download-model.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/download-model.png new file mode 100644 index 000000000..52b7fabdc Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/download-model.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/edit-property-name-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/edit-property-name-annotated.png new file mode 100644 index 000000000..94ad3f64c Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/edit-property-name-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/edit-property-name.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/edit-property-name.png new file mode 100644 index 000000000..cf2dbdd26 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/edit-property-name.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/import-summary.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/import-summary.png new file mode 100644 index 000000000..37114bef7 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/import-summary.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/map-from-file-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/map-from-file-annotated.png new file mode 100644 index 000000000..2ee4a5eeb Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/map-from-file-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/map-from-file.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/map-from-file.png new file mode 100644 index 000000000..56843a84a Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/map-from-file.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/map-properties-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/map-properties-annotated.png new file mode 100644 index 000000000..7214cad2c Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/map-properties-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/map-properties.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/map-properties.png new file mode 100644 index 000000000..3048787bd Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/map-properties.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/mapped-properties.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/mapped-properties.png new file mode 100644 index 000000000..39362818d Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/mapped-properties.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/menu.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/menu.png new file mode 100644 index 000000000..7d3170c3b Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/menu.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/movie-label-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/movie-label-annotated.png new file mode 100644 index 000000000..aa7f03edb Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/movie-label-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/movie-label.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/movie-label.png new file mode 100644 index 000000000..fdf3988a6 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/movie-label.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/movies-file-contents.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/movies-file-contents.png new file mode 100644 index 000000000..e842214e5 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/movies-file-contents.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/person-label-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/person-label-annotated.png new file mode 100644 index 000000000..32ed45e1d Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/person-label-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/person-label.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/person-label.png new file mode 100644 index 000000000..8284de11b Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/person-label.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/persons-file-contents.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/persons-file-contents.png new file mode 100644 index 000000000..d1e144057 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/persons-file-contents.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/result.svg b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/result.svg new file mode 100644 index 000000000..3cf6f61b4 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/result.svg @@ -0,0 +1 @@ +Neo4j Graph VisualizationCreated using Neo4j (http://www.neo4j.com/) Harrison Ford Tom Hanks Robin Wright Sally Field Sean Bean David Morse Bruce Willis Chris Tucker Johnny Depp Quentin Tarant… Morgan Freem… Gene Hack… Richard Harris Kate Winslet Kirsten Dunst Jim Carrey Tom Wilkin… Ed Harris Terry Gilliam Brad Pitt Jon Seda Brittany Murphy Jonathan Pryce Robert De Niro Bob Hoskins \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/run-import-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/run-import-annotated.png new file mode 100644 index 000000000..09a4d491f Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/run-import-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/run-import.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/run-import.png new file mode 100644 index 000000000..d600cd654 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/run-import.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/set-id-annotated.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/set-id-annotated.png new file mode 100644 index 000000000..09473125b Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/set-id-annotated.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/set-id.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/set-id.png new file mode 100644 index 000000000..e862a66a9 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/set-id.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/upload-file.png b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/upload-file.png new file mode 100644 index 000000000..56e613922 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/images/upload-file.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/lesson.adoc b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/lesson.adoc new file mode 100644 index 000000000..d18b4d37e --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/lesson.adoc @@ -0,0 +1,259 @@ += Data Importer +:order: 1 +:type: lesson +:disable-cache: true +:shared-dir: ../../../../shared +:solution-filename: person-import.zip + +In this lesson, you will learn how to use the Neo4j Data Importer to upload CSV files, model your data, and create nodes. + +image::images/01_data_importer_main.jpg[Neo4j Data Importer main interface,width=600,align=center] + + +== Choosing Your Import Environment + +You have two options for accessing the Data Importer: + + +=== Option A: Neo4j Aura (Recommended) + +If you are using AuraDB: + +. Log in to Neo4j Aura at `console.neo4j.io` +. Open your AuraDB instance +. Click **Import** in the left sidebar + +The Data Importer opens directly connected to your Aura database. + + +=== Option B: Neo4j Workspace (Sandbox) + +If you are using the GraphAcademy sandbox: + +. Open Neo4j Workspace Data Importer at `workspace.neo4j.io/workspace/import` +. Click **Connect** and enter your sandbox credentials: ++ +Connection URL:: [copy]#{instance-host}:{instance-boltPort}# +Username:: [copy]#{instance-username}# +Password:: [copy]#{instance-password}# + +image::images/01_data_importer_connect.jpg[Connect dialog in Data Importer,width=450,align=center] + +[%collapsible] +.Need to clear an existing model? +==== +If you have an existing data importer model, you can clear it by selecting the `Clear all` option from the menu `...`. + +image::images/clear-model-annotated.png[The clear all option in the data importer menu '...'] +==== + + +== Creating Nodes + +To create nodes in Neo4j using Data Importer, you will need to: + +. Add a data source (CSV file) +. Create a node label +. Map properties from the CSV file to the node +. Set a unique identifier +. Run the import + +=== Step 1: Add a Data Source + +Data Importer can import data from CSV (Comma Separated Values) and TSV (Tab Separated Values) files. + +. Click **New data source** in the Files panel +. Select **CSV** as the data source type ++ +image::images/01_data_importer_source.jpg[Add new data source,width=450,align=center] + +. Drag and drop your CSV file or click to browse ++ +image::images/01_data_importer_drop.jpg[Drop CSV file,width=200,align=center] + +. Once uploaded, the file contents will be displayed ++ +image::images/01_data_importer_manual.jpg[CSV file contents displayed,width=450,align=center] + +For this course, you can use the Northwind CSV files from: `https://github.com/neo4j-graph-examples/northwind/tree/main/import` + + +=== Step 2: Create a Node Label + +The Data Importer canvas starts blank, ready for you to design your graph model: + +image::images/01_data_importer_model_blank.jpg[Blank data model canvas,width=600,align=center] + +To create new nodes: + +. Click **Add node label** on the canvas +. Enter the label name (e.g., `Customer`, `Product`, `Order`) +. In the Definition panel, select the corresponding CSV file +. Click **Map from table** to map CSV columns to node properties +. Select the columns you want to import and click **Confirm** + +image::images/01_data_importer_model_person.jpg[Node with mapped properties,width=600,align=center] + +[TIP] +.Editing properties +==== +You can edit property names and types by clicking the pencil icon next to each property. This allows you to: + +* Rename columns to follow Neo4j naming conventions (e.g., `customer_id` → `customerID`) +* Change data types (String, Integer, Float, Boolean, Date) +* Remove columns you do not need +==== + + +=== Step 3: Set a Unique Identifier + +Every node type needs a unique identifier to: + +* Prevent duplicate nodes during import +* Enable efficient lookups +* Create relationships between nodes + +Click the **key icon** next to the ID property to set it as the unique identifier. + +image::images/set-id-annotated.png[The key icon next to the ID property] + +Data Importer creates a `Name` for each property and assigns a `Type` based on the data in the file. The `Column` refers to the field in the CSV file. + +=== Step 4: Run the Import + +Once your model is complete: + +. Click **Run import** ++ +image::images/run-import-annotated.png[The run import button] + +. If using Workspace (not Aura), you will need to connect to your database: ++ +image::images/01_data_importer_connect.jpg[Connect to database,width=450,align=center] + +. Wait for the import to complete. You will see a summary of the results: ++ +image::images/01_data_importer_result.jpg[Import results summary,width=450,align=center] + +. Click **Close** to return to Data Importer + + +=== Step 5: Save Your Model + +After a successful import: + +. Give your data model a name (e.g., "Northwind Model") +. Click **Save** + +image::images/01_data_importer_model_named.jpg[Named data model,width=450,align=center] + +[TIP] +.Reusing your model +==== +Saved models can be reused for future imports. You can also download your model using the **...** menu > **Download model (with data)** to back it up or share with colleagues. +==== + + +== Verify the Import + +After importing, verify your data in the Query tool: + +[source,cypher] +---- +// Count nodes by label +MATCH (n) +RETURN labels(n)[0] AS label, COUNT(*) AS count +ORDER BY count DESC +---- + +[source,cypher] +---- +// View sample data +MATCH (c:Customer) RETURN c LIMIT 10 +---- + +image::images/result.svg[Query results showing imported nodes] + + +== Common Import Mistakes to Avoid + +When importing nodes, watch out for these common mistakes: + +[IMPORTANT] +.Mistake 1: Not setting a unique identifier +==== +**Problem:** Importing nodes without a unique ID property. + +**Consequence:** +* Cannot use MERGE to update existing nodes +* May create duplicate nodes on re-import +* Difficult to create relationships later + +**Solution:** Always set a unique identifier for each node type before importing. +==== + +[IMPORTANT] +.Mistake 2: Importing foreign keys as properties +==== +**Problem:** Keeping foreign key columns as node properties. + +**Example:** Creating a `Customer` node with `customerID` AND keeping `order_id` as a property. + +**Reality:** Foreign keys should become relationships, not properties. The `order_id` on a customer does not make sense - instead, create a relationship from Customer to Order. +==== + +[IMPORTANT] +.Mistake 3: Wrong data types +==== +**Problem:** Importing all data as strings when other types are appropriate. + +**Examples:** +* Dates stored as strings instead of Date type +* Numbers stored as strings instead of Integer/Float +* Booleans stored as "true"/"false" strings + +**Solution:** Check and set appropriate data types in Data Importer or convert during Cypher import. +==== + +[IMPORTANT] +.Mistake 4: Creating nodes before constraints +==== +**Problem:** Importing nodes first, then trying to add constraints. + +**Consequence:** If duplicate data exists, constraint creation will fail. + +**Solution:** Always create constraints BEFORE importing data: +[source,cypher,role=noplay] +---- +CREATE CONSTRAINT customer_id IF NOT EXISTS +FOR (c:Customer) REQUIRE c.customerID IS UNIQUE +---- +==== + +[TIP] +.Backup your work +==== +Data Importer saves changes automatically, but you can download your import model and data by selecting the `Download model (with data)` option from the menu `...`. + +image::images/download-model-data-annotated.png[The download model (with data) option in the data importer menu '...'] + +You can restore your model using the `Open model (with data)` option and selecting the downloaded file. +==== + +[%collapsible] +.Need to download a working solution? +==== +include::{shared-dir}/solution.adoc[] +==== + +[.quiz] +== Check Your Understanding + +include::questions/1-requirements.adoc[leveloffset=+1] + +[.summary] +== Summary + +In this lesson, you learned to import nodes from a CSV file using Data Importer. + +In the next lesson, you will learn about the options for setting properties and data types. diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/questions/1-requirements.adoc b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/questions/1-requirements.adoc new file mode 100644 index 000000000..515b090d2 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/3-importing-nodes/questions/1-requirements.adoc @@ -0,0 +1,28 @@ +[.question] += Creating Nodes with Data Importer + +What must you do to create nodes using Data Importer? (Select all that apply) + +- [x] Upload a source file +- [x] Create a node label +- [x] Set a unique identifier for each node +- [ ] Update at least one property name + + +[TIP,role=hint] +.Hint +==== +You can modify a node's property names, although it is not mandatory. +==== + +[TIP,role=solution] +.Solution +==== +To create nodes using Data Importer, you must: + +* Upload a source file +* Create a node label +* Set a unique identifier for each node. + +You do not *have* to update any property names. +==== \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/4-creating-relationships/lesson.adoc b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/4-creating-relationships/lesson.adoc new file mode 100644 index 000000000..d80f5c6b7 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/4-creating-relationships/lesson.adoc @@ -0,0 +1,187 @@ += Creating Relationships +:order: 3 +:type: lesson + +In the previous lesson, you learned how to create nodes using the Data Importer. In this lesson, you will learn how to create relationships between nodes. + + +== Creating Relationships in Data Importer + +Relationships connect nodes and represent how data is connected. In the Northwind model, relationships include: + +* `Customer` -[:PLACED]-> `Order` +* `Order` -[:CONTAINS]-> `Product` +* `Product` -[:IN_CATEGORY]-> `Category` +* `Supplier` -[:SUPPLIES]-> `Product` + + +=== Step 1: Create Nodes First + +Before creating relationships, ensure all your node types exist in the model: + +. Add all node labels (Customer, Order, Product, Category, Supplier, etc.) +. Map properties from CSV files +. Set unique identifiers for each node type + + +=== Step 2: Draw a Relationship + +In the Data Importer canvas: + +. Hover over the edge of the source node until you see the **+** icon +. Drag from the source node to the target node +. Release to create the relationship + +image::images/01_data_importer_model_actedin.jpg[Creating a relationship in Data Importer,width=600,align=center] + + +=== Step 3: Configure the Relationship + +In the Definition panel: + +. Enter the **relationship type** (e.g., `PLACED`, `CONTAINS`, `IN_CATEGORY`) +. Select the **data source** (CSV file) that contains the relationship data +. Map the **From ID** - the column that matches the source node's unique identifier +. Map the **To ID** - the column that matches the target node's unique identifier +. Optionally map **relationship properties** from additional columns + +[NOTE] +.Green checkmarks indicate valid mappings +==== +The Data Importer shows a green checkmark when an element has been mapped correctly. If you see a warning, check that: + +* The ID columns match the unique identifiers on the nodes +* The data types are compatible +* The CSV file contains the expected columns +==== + + +=== Step 4: Add Relationship Properties + +Some relationships carry additional data. For example, the `CONTAINS` relationship between Order and Product includes: + +* `quantity` - how many units were ordered +* `unitPrice` - the price at the time of order +* `discount` - any discount applied + +To add relationship properties: + +. Select the relationship in the model +. Click **Map from table** +. Select the columns to include as properties +. Set appropriate data types + + +== Example: Northwind Relationships + +For the Northwind dataset, create these relationships: + +[cols="1,1,1,2"] +|=== +| From | Relationship | To | Properties + +| Customer +| PLACED +| Order +| (none) + +| Order +| CONTAINS +| Product +| quantity, unitPrice, discount + +| Product +| IN_CATEGORY +| Category +| (none) + +| Supplier +| SUPPLIES +| Product +| (none) + +| Employee +| PROCESSED +| Order +| (none) + +| Order +| SHIPPED_BY +| Shipper +| (none) + +| Employee +| REPORTS_TO +| Employee +| (none) + +|=== + + +== Verify Relationships + +After importing, verify your relationships: + +[source,cypher] +---- +// Count relationships by type +MATCH ()-[r]->() +RETURN type(r) AS relationship, COUNT(*) AS count +ORDER BY count DESC +---- + +[source,cypher] +---- +// Sample a specific relationship +MATCH (c:Customer)-[r:PLACED]->(o:Order) +RETURN c.companyName, o.orderID +LIMIT 5 +---- + +[source,cypher] +---- +// Check relationship properties +MATCH (o:Order)-[r:CONTAINS]->(p:Product) +RETURN o.orderID, p.productName, r.quantity, r.unitPrice +LIMIT 5 +---- + + +== Using Aura vs Sandbox + +=== Neo4j Aura + +If you are using AuraDB, the Data Importer is integrated: + +. Open your instance and click **Import** +. Design your model with nodes and relationships +. Click **Run import** to execute + +=== GraphAcademy Sandbox + +If you are using the sandbox: + +. Open Neo4j Workspace Data Importer at `workspace.neo4j.io/workspace/import` +. Connect using your sandbox credentials: ++ +Connection URL:: [copy]#{instance-host}:{instance-boltPort}# +Username:: [copy]#{instance-username}# +Password:: [copy]#{instance-password}# + + +[.quiz] +== Check Your Understanding + +include::questions/1-relationship-mapping.adoc[leveloffset=+1] + + +[.summary] +== Summary + +In this lesson, you learned how to create relationships in the Data Importer by: + +* Drawing connections between nodes +* Mapping ID columns to link nodes +* Adding relationship properties + +In the next lesson, you will learn how to handle complex data scenarios during import. \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/4-creating-relationships/questions/1-relationship-mapping.adoc b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/4-creating-relationships/questions/1-relationship-mapping.adoc new file mode 100644 index 000000000..f3cd219e0 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/4-creating-relationships/questions/1-relationship-mapping.adoc @@ -0,0 +1,27 @@ +[.question] += Relationship ID Mapping + +When creating a relationship in the Data Importer, what must you map to connect two nodes? + +* [ ] The node labels +* [ ] The relationship properties +* [x] The unique identifiers (IDs) of the source and target nodes +* [ ] The CSV file name + +[TIP,role=hint] +.Hint +==== +Relationships connect nodes using their unique identifiers. The Data Importer needs to know which column in the CSV matches the ID on each node. +==== + +[TIP,role=solution] +.Solution +==== +You must map the **unique identifiers (IDs) of the source and target nodes**. The Data Importer uses these IDs to find the correct nodes and create the relationship between them. + +For example, to create a `PLACED` relationship between Customer and Order, you map: + +* **From ID**: The column containing customer IDs (matching Customer's unique identifier) +* **To ID**: The column containing order IDs (matching Order's unique identifier) +==== + diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/4-handling-complex-data/lesson.adoc b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/4-handling-complex-data/lesson.adoc new file mode 100644 index 000000000..316cddebc --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/4-handling-complex-data/lesson.adoc @@ -0,0 +1,602 @@ += Handling Complex Data Scenarios +:order: 5 +:type: lesson + +When importing relational data into Neo4j, you will likely encounter scenarios that require special handling. This lesson covers common challenges and their solutions, based on issues that frequently arise in production migration projects. + +[NOTE] +.Aura and Sandbox +==== +The techniques in this lesson apply to both Neo4j Aura and the GraphAcademy Sandbox. For Cypher-based solutions, you can use: + +* **Aura**: The Query tool in your AuraDB instance +* **Sandbox**: Neo4j Browser or the Query tab in Neo4j Workspace +==== + + +== Handling NULL Values + +Relational databases use NULL to represent missing or unknown values. When importing into Neo4j: + +* **Properties with NULL values are not created** - Neo4j does not store NULL properties +* **Use COALESCE in Cypher** to provide default values if needed +* **Consider whether NULL means "unknown" or "not applicable"** - this affects your model + +=== Example: Handling NULL Regions + +In the Northwind database, the `region` column is often NULL for non-US customers: + +[source,sql] +---- +SELECT customer_id, company_name, region +FROM customers +WHERE region IS NULL; +---- + +When importing, you have options: + +. **Skip the property** - Let Neo4j omit it naturally +. **Use a default value** - Set region to "N/A" or "Unknown" +. **Use conditional logic** - Only set the property when a value exists + + +== Handling Data Type Mismatches + +Sometimes source data does not match expected types: + +=== Mixed Data Types in Columns + +If a column contains mixed types (e.g., numbers and text): + +[source,sql] +---- +-- Find non-numeric values in a supposedly numeric column +SELECT postal_code FROM customers +WHERE postal_code !~ '^[0-9]+$'; +---- + +Solutions: +* Import as String and convert later if needed +* Clean the data before import +* Use separate properties for different interpretations + + +=== Date Format Variations + +Dates may be stored in different formats: + +[source,sql] +---- +-- Check date formats +SELECT DISTINCT TO_CHAR(order_date, 'YYYY-MM-DD') as formatted_date +FROM orders +LIMIT 10; +---- + +Ensure consistent date formatting before import, or handle conversion during the import process. + + +== Handling Self-Referencing Relationships + +The `employees` table has a self-referencing `reports_to` column for the management hierarchy. + +=== Challenge: Order of Operations + +When creating `REPORTS_TO` relationships: + +. All Employee nodes must exist first +. Then create the relationships + +This requires a two-pass import: + +**Pass 1: Create Employee nodes** +[source,cypher,role=noplay] +---- +LOAD CSV WITH HEADERS FROM 'file:///employees.csv' AS row +CREATE (e:Employee { + employeeID: toInteger(row.employee_id), + firstName: row.first_name, + lastName: row.last_name +}) +---- + +**Pass 2: Create REPORTS_TO relationships** +[source,cypher,role=noplay] +---- +LOAD CSV WITH HEADERS FROM 'file:///employees.csv' AS row +MATCH (e:Employee {employeeID: toInteger(row.employee_id)}) +MATCH (m:Employee {employeeID: toInteger(row.reports_to)}) +CREATE (e)-[:REPORTS_TO]->(m) +---- + + +== Handling Large Datasets + +For large imports, consider: + +=== Batch Processing + +Instead of importing all data at once, process in batches: + +[source,cypher,role=noplay] +---- +:auto LOAD CSV WITH HEADERS FROM 'file:///large_file.csv' AS row +CALL { + WITH row + CREATE (n:Node {id: row.id, name: row.name}) +} IN TRANSACTIONS OF 10000 ROWS +---- + +=== Periodic Commit (Legacy) + +For older Neo4j versions: + +[source,cypher,role=noplay] +---- +USING PERIODIC COMMIT 10000 +LOAD CSV WITH HEADERS FROM 'file:///large_file.csv' AS row +CREATE (n:Node {id: row.id}) +---- + + +== Handling Duplicate Data + +Relational data may contain duplicates that need handling: + +=== Detecting Duplicates + +[source,sql] +---- +-- Find duplicate company names +SELECT company_name, COUNT(*) +FROM customers +GROUP BY company_name +HAVING COUNT(*) > 1; +---- + +=== Strategies for Duplicates + +. **Merge duplicates** - Combine into a single node +. **Keep all records** - Use a unique identifier to distinguish +. **Clean before import** - Remove duplicates in the source + + +== Handling Many-to-Many with Additional Data + +When junction tables have significant additional data beyond foreign keys, consider whether to: + +. **Use relationship properties** - For simple additional data +. **Create intermediate nodes** - For complex data or when you need to query the junction independently + +=== Example: Order Details with Complex Data + +If `order_details` had shipment tracking, return status, and other complex data: + +[source] +---- +// Option 1: Relationship properties (simple case) +(Order)-[:CONTAINS {quantity: 10, unitPrice: 15.00}]->(Product) + +// Option 2: Intermediate node (complex case) +(Order)-[:HAS_LINE_ITEM]->(OrderLine)-[:FOR_PRODUCT]->(Product) +---- + + +== Best Practices for Complex Data Import + +The following best practices are derived from real-world import projects. They address issues that commonly cause failures or data quality problems. + +[TIP] +.Bookmark the best practices checklist +==== +Bookmark this section. These nine best practices serve as a reference checklist for any data import project you undertake in the future. +==== + + +=== Best Practice 1: Create Constraints Before Import + +Always create unique constraints before importing any data. + +[source,cypher,role=noplay] +---- +// Create all constraints first +CREATE CONSTRAINT customer_id IF NOT EXISTS +FOR (c:Customer) REQUIRE c.customerID IS UNIQUE +---- + +[source,cypher,role=noplay] +---- +CREATE CONSTRAINT order_id IF NOT EXISTS +FOR (o:Order) REQUIRE o.orderID IS UNIQUE +---- + +[source,cypher,role=noplay] +---- +CREATE CONSTRAINT product_id IF NOT EXISTS +FOR (p:Product) REQUIRE p.productID IS UNIQUE +---- + +**Why this matters:** + +* Prevents duplicate nodes during import +* Enables efficient MERGE operations +* Creates indexes automatically for faster lookups +* Catches data quality issues early + +[TIP] +.Verify constraints before importing +==== +Run `SHOW CONSTRAINTS` after creating them to verify they are in place before starting the import. +==== + + +=== Best Practice 2: Import in the Correct Order + +Follow this sequence for reliable imports: + +[cols="1,2,3"] +|=== +| Step | Action | Reason + +| 1 +| Create constraints +| Enable MERGE and prevent duplicates + +| 2 +| Import independent nodes first +| Categories, Suppliers, Shippers (no foreign keys to other entities) + +| 3 +| Import dependent nodes +| Products (needs Categories, Suppliers), Customers, Employees + +| 4 +| Import transaction nodes +| Orders (needs Customers, Employees, Shippers) + +| 5 +| Create relationships +| All referenced nodes must exist + +|=== + +**Northwind Import Order:** + +[source] +---- +// Step 2: Independent nodes +LOAD CSV ... // Categories +LOAD CSV ... // Suppliers +LOAD CSV ... // Shippers + +// Step 3: Dependent nodes +LOAD CSV ... // Products (references Categories, Suppliers) +LOAD CSV ... // Customers +LOAD CSV ... // Employees + +// Step 4: Transaction nodes +LOAD CSV ... // Orders (references Customers, Employees, Shippers) + +// Step 5: Relationships +// PLACED, CONTAINS, IN_CATEGORY, SUPPLIES, REPORTS_TO, etc. +---- + + +=== Best Practice 3: Use MERGE for Idempotent Imports + +Make your imports re-runnable without creating duplicates: + +[source,cypher,role=noplay] +---- +// Bad: Creates duplicates on re-run +LOAD CSV WITH HEADERS FROM 'file:///customers.csv' AS row +CREATE (c:Customer {customerID: row.customer_id, companyName: row.company_name}) +---- + +[source,cypher,role=noplay] +---- +// Good: Idempotent - safe to re-run +LOAD CSV WITH HEADERS FROM 'file:///customers.csv' AS row +MERGE (c:Customer {customerID: row.customer_id}) +SET c.companyName = row.company_name, + c.contactName = row.contact_name, + c.city = row.city, + c.country = row.country +---- + +**When to use MERGE vs CREATE:** + +[cols="1,1,2"] +|=== +| Command | Use When | Example + +| CREATE +| First-time import with guaranteed unique data +| Initial bulk load with clean data + +| MERGE +| Re-runnable imports, incremental updates +| Regular sync from source system + +| MERGE + ON CREATE/ON MATCH +| Different behavior for new vs existing +| Update timestamps only on changes + +|=== + + +=== Best Practice 4: Handle NULL Values Explicitly + +Do not let NULL values cause silent failures: + +[source,cypher,role=noplay] +---- +// Bad: May fail silently or create unexpected results +LOAD CSV WITH HEADERS FROM 'file:///customers.csv' AS row +MERGE (c:Customer {customerID: row.customer_id}) +SET c.region = row.region +---- + +[source,cypher,role=noplay] +---- +// Good: Explicit NULL handling +LOAD CSV WITH HEADERS FROM 'file:///customers.csv' AS row +MERGE (c:Customer {customerID: row.customer_id}) +SET c.companyName = row.company_name, + c.region = CASE WHEN row.region IS NOT NULL AND row.region <> '' + THEN row.region + ELSE null END +---- + +**NULL Handling Strategies:** + +[cols="1,2,2"] +|=== +| Strategy | When to Use | Implementation + +| Omit property +| Value is truly optional +| Use CASE to return null + +| Default value +| Need consistent property for queries +| Use COALESCE(row.field, 'Unknown') + +| Separate label +| NULL indicates a category +| Add label like :NoRegion + +|=== + + +=== Best Practice 5: Validate Foreign Keys Before Creating Relationships + +Avoid creating relationships to non-existent nodes: + +[source,cypher,role=noplay] +---- +// Bad: Silently fails if customer does not exist +LOAD CSV WITH HEADERS FROM 'file:///orders.csv' AS row +MATCH (c:Customer {customerID: row.customer_id}) +MATCH (o:Order {orderID: toInteger(row.order_id)}) +CREATE (c)-[:PLACED]->(o) +---- + +[source,cypher,role=noplay] +---- +// Good: Log missing references +LOAD CSV WITH HEADERS FROM 'file:///orders.csv' AS row +OPTIONAL MATCH (c:Customer {customerID: row.customer_id}) +WITH row, c +WHERE c IS NULL +RETURN row.order_id AS orderWithMissingCustomer, row.customer_id AS missingCustomerID +---- + +**Pre-import validation query:** + +[source,cypher,role=noplay] +---- +// Check for orphan foreign keys before import +LOAD CSV WITH HEADERS FROM 'file:///orders.csv' AS row +WITH row.customer_id AS custId +WHERE NOT EXISTS ((c:Customer {customerID: custId})) +RETURN DISTINCT custId AS missingCustomer +---- + + +=== Best Practice 6: Use Transactions for Related Data + +Keep related data consistent: + +[source,cypher,role=noplay] +---- +// Import order and its details in one transaction +:auto LOAD CSV WITH HEADERS FROM 'file:///orders_with_details.csv' AS row +CALL { + WITH row + MERGE (o:Order {orderID: toInteger(row.order_id)}) + SET o.orderDate = date(row.order_date) + + WITH o, row + MATCH (p:Product {productID: toInteger(row.product_id)}) + MERGE (o)-[r:CONTAINS]->(p) + SET r.quantity = toInteger(row.quantity), + r.unitPrice = toFloat(row.unit_price) +} IN TRANSACTIONS OF 1000 ROWS +---- + + +=== Best Practice 7: Log and Monitor Import Progress + +Track what is happening during import: + +[source,cypher] +---- +// Before import: Record starting counts +MATCH (n) +RETURN labels(n)[0] AS label, COUNT(*) AS beforeCount +---- + +[source,cypher] +---- +// After import: Compare counts +MATCH (n) +RETURN labels(n)[0] AS label, COUNT(*) AS afterCount +---- + +[source,cypher] +---- +// Check for import issues +MATCH (o:Order) +WHERE NOT EXISTS ((:Customer)-[:PLACED]->(o)) +RETURN COUNT(o) AS ordersWithoutCustomer +---- + +**Create an import log:** + +[source,cypher,role=noplay] +---- +// Create import metadata node +CREATE (i:ImportLog { + timestamp: datetime(), + source: 'northwind', + customersImported: 91, + ordersImported: 830, + status: 'COMPLETED' +}) +---- + + +=== Best Practice 8: Clean Up After Failed Imports + +If an import fails partway through: + +[source,cypher,role=noplay] +---- +// Remove partially imported data (be careful!) +// First, identify what was imported in the failed batch +MATCH (n) +WHERE n.importBatch = 'batch_2024_01_15' +DETACH DELETE n +---- + +[source,cypher,role=noplay] +---- +// Or remove nodes without expected relationships +MATCH (o:Order) +WHERE NOT EXISTS ((:Customer)-[:PLACED]->(o)) +DETACH DELETE o +---- + +[WARNING] +.Backup before running DELETE operations +==== +Always backup your database before running DELETE operations, especially DETACH DELETE which removes nodes and all their relationships. +==== + + +=== Best Practice 9: Document Your Import Process + +Create a runbook for your import: + +[source] +---- +# Northwind Import Runbook + +## Prerequisites +- [ ] PostgreSQL Northwind database running +- [ ] Neo4j database accessible +- [ ] CSV files exported to import directory + +## Step 1: Create Constraints +Run: constraints.cypher +Expected: 7 constraints created + +## Step 2: Import Categories +Run: import-categories.cypher +Expected: 8 Category nodes + +## Step 3: Import Suppliers +Run: import-suppliers.cypher +Expected: 29 Supplier nodes + +... (continue for all steps) + +## Validation +Run: validate-counts.cypher +Run: validate-relationships.cypher +Run: validate-sample-data.cypher +---- + + +== Organizing Your Queries + +=== In Neo4j Aura + +In the Aura Query tool, create folders to organize the import queries from this lesson. The folder names reflect the execution order: + +* **Folder: `01-Setup-Constraints`** - Save constraint creation queries (from Best Practice 1) +* **Folder: `02-Import-Independent-Nodes`** - Save queries for Categories, Suppliers, Shippers +* **Folder: `03-Import-Dependent-Nodes`** - Save queries for Products, Customers, Employees +* **Folder: `04-Import-Transaction-Nodes`** - Save queries for Orders +* **Folder: `05-Create-Relationships`** - Save relationship creation queries +* **Folder: `06-Validation`** - Save count verification and integrity check queries +* **Folder: `Maintenance-Cleanup`** - Save cleanup queries for failed imports (from Best Practice 8) +* **Folder: `Maintenance-Monitoring`** - Save progress monitoring queries (from Best Practice 7) + +To create folders in Aura: + +. Open the Query tool +. Click the **+** button next to "Saved Cypher" +. Select **New Folder** +. Name the folder and save queries inside it + + +=== In GraphAcademy Sandbox + +If you are using the sandbox with Neo4j Browser: + +. Save queries using the **Favorites** feature (star icon) +. Use descriptive names with prefixes (e.g., "01-Constraints", "02-Categories") +. Export your favorites periodically as a backup + +This folder structure ensures you execute queries in the correct dependency order and can locate maintenance queries when needed. + + +== Best Practices Summary Checklist + +Use this checklist for every import: + +[%interactive] +* [ ] Constraints created before import +* [ ] Import order follows dependency chain +* [ ] Using MERGE for idempotent imports +* [ ] NULL values handled explicitly +* [ ] Foreign keys validated before relationship creation +* [ ] Related data imported in transactions +* [ ] Import progress logged and monitored +* [ ] Cleanup plan ready for failed imports +* [ ] Import process documented + + +[.quiz] +== Check Your Understanding + +include::questions/1-null-values.adoc[leveloffset=+1] + +include::questions/2-best-practices.adoc[leveloffset=+1] + + +[.summary] +== Summary + +In this lesson, you learned strategies for handling: + +* NULL values in source data +* Data type mismatches +* Self-referencing relationships +* Large dataset imports +* Duplicate data +* Complex many-to-many relationships + +These techniques address the complexities of production data imports that simplified examples often omit. diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/4-handling-complex-data/questions/1-null-values.adoc b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/4-handling-complex-data/questions/1-null-values.adoc new file mode 100644 index 000000000..e37ec4c0c --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/4-handling-complex-data/questions/1-null-values.adoc @@ -0,0 +1,27 @@ +[.question] += Handling NULL Values + +What happens when you import a property with a NULL value into Neo4j? + +- [ ] Neo4j stores the property with a NULL value +- [ ] Neo4j throws an error and stops the import +- [x] Neo4j does not create the property at all +- [ ] Neo4j converts NULL to an empty string + + +[TIP,role=hint] +.Hint +==== +Think about how Neo4j handles missing data differently from relational databases. +==== + +[TIP,role=solution] +.Solution +==== +When importing data with NULL values, **Neo4j does not create the property at all**. + +Unlike relational databases that explicitly store NULL values, Neo4j simply omits properties that have no value. This means nodes of the same label can have different sets of properties. + +If you need to distinguish between "unknown" and "not applicable," you should use a specific value (like "N/A" or "Unknown") instead of relying on NULL. +==== + diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/4-handling-complex-data/questions/2-best-practices.adoc b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/4-handling-complex-data/questions/2-best-practices.adoc new file mode 100644 index 000000000..c6e9d1f94 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/lessons/4-handling-complex-data/questions/2-best-practices.adoc @@ -0,0 +1,34 @@ +[.question] += Import Best Practices + +What is the correct order for importing relational data into Neo4j? + +- [ ] Import all nodes first, then create all constraints, then create relationships +- [ ] Import relationships first, then nodes, then constraints +- [x] Create constraints first, then import independent nodes, then dependent nodes, then relationships +- [ ] The order does not matter as long as all data is imported + + +[TIP,role=hint] +.Hint +==== +Think about what needs to exist before you can create relationships, and what helps ensure data integrity during import. +==== + +[TIP,role=solution] +.Solution +==== +The correct order is: + +1. **Create constraints first** - Enables MERGE operations and prevents duplicates +2. **Import independent nodes** - Nodes with no foreign keys (Categories, Suppliers, Shippers) +3. **Import dependent nodes** - Nodes that reference other nodes (Products, Customers, Employees, Orders) +4. **Create relationships** - All referenced nodes must exist first + +This order ensures: +* No duplicate nodes are created +* All foreign key references can be resolved +* Relationships connect to existing nodes +* Import is idempotent (can be re-run safely) +==== + diff --git a/asciidoc/courses/importing-relational-to-graph/modules/3-importing/module.adoc b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/module.adoc new file mode 100644 index 000000000..fe8644c01 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/3-importing/module.adoc @@ -0,0 +1,16 @@ += Importing Data +:order: 3 + +In this module, you will learn how to import data from relational databases into Neo4j using the Data Importer tool. + +You will: + +* Understand how source data characteristics affect your import strategy +* Learn to use the Neo4j Data Importer to create nodes from CSV files +* Create relationships between nodes in your graph model +* Handle complex data scenarios including NULL values, data type mismatches, and large datasets +* Apply best practices for reliable, repeatable imports + +By the end of this module, you will have hands-on experience importing the Northwind dataset into Neo4j, transforming relational tables into a connected graph. + +link:./1-aura-setup/[Ready? Let's go →, role=btn] diff --git a/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/1-validating/lesson.adoc b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/1-validating/lesson.adoc new file mode 100644 index 000000000..9a6a23994 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/1-validating/lesson.adoc @@ -0,0 +1,506 @@ += Validating Imported Data +:order: 1 +:type: lesson + +After importing data from a relational database into Neo4j, you must verify that all data was transferred correctly. This lesson provides a test plan and test cases for validating your Northwind import. Systematic validation is necessary because visual inspection alone cannot detect missing records, broken relationships, or data type errors. + + +== Validation Test Plan + +A thorough validation process should cover these areas: + +[cols="1,2,2"] +|=== +| Category | What to Test | Why It Matters + +| Node Counts +| Number of nodes matches source row counts +| Ensures no data was lost or duplicated during import + +| Relationship Counts +| Number of relationships matches expected connections +| Verifies foreign key relationships were correctly converted + +| Property Integrity +| Properties have correct values and data types +| Confirms data transformation was accurate + +| Referential Integrity +| All relationships connect to existing nodes +| Ensures no orphan relationships or missing nodes + +| Constraint Verification +| Unique constraints are enforced +| Prevents duplicate data issues + +| Sample Data Validation +| Spot-check specific records against source +| Catches subtle transformation errors + +|=== + + +== Test Case 1: Node Count Validation + +Verify that the number of nodes in Neo4j matches the row counts in the source PostgreSQL tables. + + +=== PostgreSQL Source Counts + +Run these queries in PostgreSQL to get expected counts: + +[source,sql] +---- +SELECT 'customers' as table_name, COUNT(*) as row_count FROM customers +UNION ALL SELECT 'orders', COUNT(*) FROM orders +UNION ALL SELECT 'products', COUNT(*) FROM products +UNION ALL SELECT 'categories', COUNT(*) FROM categories +UNION ALL SELECT 'suppliers', COUNT(*) FROM suppliers +UNION ALL SELECT 'employees', COUNT(*) FROM employees +UNION ALL SELECT 'shippers', COUNT(*) FROM shippers; +---- + +Expected results for Northwind: + +[cols="1,1"] +|=== +| Table | Expected Count + +| customers | 91 +| orders | 830 +| products | 77 +| categories | 8 +| suppliers | 29 +| employees | 9 +| shippers | 3 + +|=== + + +=== Neo4j Validation Queries + +Run these queries in Neo4j to verify node counts: + +[source,cypher] +---- +// Count all node types +MATCH (n) +RETURN labels(n)[0] AS label, COUNT(*) AS count +ORDER BY label +---- + +Or check each label individually: + +[source,cypher] +---- +// Verify Customer count (Expected: 91) +MATCH (c:Customer) RETURN COUNT(c) AS customerCount +---- + +[source,cypher] +---- +// Verify Order count (Expected: 830) +MATCH (o:Order) RETURN COUNT(o) AS orderCount +---- + +[source,cypher] +---- +// Verify Product count (Expected: 77) +MATCH (p:Product) RETURN COUNT(p) AS productCount +---- + +[NOTE] +.Test Result +==== +**PASS** if counts match exactly. +**FAIL** if counts differ - investigate missing or duplicate records. +==== + + +== Test Case 2: Relationship Count Validation + +Verify that relationships were created correctly from foreign keys. + + +=== Expected Relationship Counts + +Calculate expected counts from PostgreSQL: + +[source,sql] +---- +-- PLACED relationships (orders.customer_id -> customers) +SELECT 'PLACED' as relationship, COUNT(*) as expected_count +FROM orders WHERE customer_id IS NOT NULL +UNION ALL +-- PROCESSED relationships (orders.employee_id -> employees) +SELECT 'PROCESSED', COUNT(*) +FROM orders WHERE employee_id IS NOT NULL +UNION ALL +-- CONTAINS relationships (order_details) +SELECT 'CONTAINS', COUNT(*) +FROM order_details +UNION ALL +-- IN_CATEGORY relationships (products.category_id -> categories) +SELECT 'IN_CATEGORY', COUNT(*) +FROM products WHERE category_id IS NOT NULL +UNION ALL +-- SUPPLIES relationships (products.supplier_id -> suppliers) +SELECT 'SUPPLIES', COUNT(*) +FROM products WHERE supplier_id IS NOT NULL +UNION ALL +-- REPORTS_TO relationships (employees.reports_to -> employees) +SELECT 'REPORTS_TO', COUNT(*) +FROM employees WHERE reports_to IS NOT NULL; +---- + + +=== Neo4j Validation Queries + +[source,cypher] +---- +// Count all relationship types +MATCH ()-[r]->() +RETURN type(r) AS relationshipType, COUNT(*) AS count +ORDER BY relationshipType +---- + +Verify specific relationships: + +[source,cypher] +---- +// PLACED relationships (Expected: 830, one per order) +MATCH (:Customer)-[r:PLACED]->(:Order) +RETURN COUNT(r) AS placedCount +---- + +[source,cypher] +---- +// CONTAINS relationships (Expected: 2155, from order_details) +MATCH (:Order)-[r:CONTAINS]->(:Product) +RETURN COUNT(r) AS containsCount +---- + +[source,cypher] +---- +// REPORTS_TO relationships (Expected: 8, all employees except the CEO) +MATCH (:Employee)-[r:REPORTS_TO]->(:Employee) +RETURN COUNT(r) AS reportsToCount +---- + + +== Test Case 3: Referential Integrity + +Verify that all relationships connect to existing nodes (no orphan relationships). + + +=== Check for Orphan Orders + +[source,cypher] +---- +// Find orders without a customer relationship +MATCH (o:Order) +WHERE NOT (:Customer)-[:PLACED]->(o) +RETURN o.orderID AS orphanOrder +LIMIT 10 +---- + +**Expected:** No results (all orders should have a customer). + + +=== Check for Products Without Categories + +[source,cypher] +---- +// Find products without a category +MATCH (p:Product) +WHERE NOT (p)-[:IN_CATEGORY]->(:Category) +RETURN p.productID, p.productName AS orphanProduct +---- + +**Expected:** No results (all products should have a category). + + +=== Check for Employees Without Manager (except CEO) + +[source,cypher] +---- +// Find employees without a manager (should only be the CEO) +MATCH (e:Employee) +WHERE NOT (e)-[:REPORTS_TO]->(:Employee) +RETURN e.employeeID, e.firstName, e.lastName, e.title +---- + +**Expected:** One result - the CEO (Andrew Fuller, Vice President Sales). + + +== Test Case 4: Property Validation + +Verify that properties have correct values and data types. + + +=== Check Data Types + +[source,cypher,role=noplay] +---- +// Verify orderDate is a date type, not a string +MATCH (o:Order) +WHERE o.orderDate IS NOT NULL +RETURN + o.orderID, + o.orderDate, + apoc.meta.type(o.orderDate) AS dateType +LIMIT 5; +---- + +**Expected:** `dateType` should be `DATE` or `LOCAL_DATE`, not `STRING`. + +[NOTE] +==== +The `apoc.meta.type()` function requires the APOC library. If APOC is not installed, you can check data types by examining the values - dates will display in ISO format (e.g., `2024-01-15`), while strings will show as quoted text. +==== + + +=== Check for Empty Strings vs Missing Properties + +[source,cypher] +---- +// Find customers where region might be empty string instead of missing +MATCH (c:Customer) +WHERE c.region = '' OR c.region = ' ' +RETURN c.customerID, c.companyName, c.region +---- + +**Expected:** No results - empty values should be omitted, not stored as empty strings. + + +=== Verify Numeric Properties + +[source,cypher,role=noplay] +---- +// Check that unitPrice is numeric +MATCH (p:Product) +RETURN + p.productID, + p.productName, + p.unitPrice, + apoc.meta.type(p.unitPrice) AS priceType +LIMIT 5; +---- + +**Expected:** `priceType` should be `FLOAT` or `DOUBLE`, not `STRING`. + + +== Test Case 5: Sample Data Validation + +Spot-check specific records to verify data accuracy. + + +=== Validate a Specific Customer + +PostgreSQL: +[source,sql] +---- +SELECT * FROM customers WHERE customer_id = 'ALFKI'; +---- + +Neo4j: +[source,cypher] +---- +MATCH (c:Customer {customerID: 'ALFKI'}) +RETURN c.companyName, c.contactName, c.city, c.country +---- + +**Expected:** +* companyName: "Alfreds Futterkiste" +* contactName: "Maria Anders" +* city: "Berlin" +* country: "Germany" + + +=== Validate an Order with Details + +PostgreSQL: +[source,sql] +---- +SELECT o.order_id, c.company_name, COUNT(od.product_id) as item_count +FROM orders o +JOIN customers c ON o.customer_id = c.customer_id +JOIN order_details od ON o.order_id = od.order_id +WHERE o.order_id = 10248 +GROUP BY o.order_id, c.company_name; +---- + +Neo4j: +[source,cypher] +---- +MATCH (c:Customer)-[:PLACED]->(o:Order {orderID: 10248})-[:CONTAINS]->(p:Product) +RETURN c.companyName, o.orderID, COUNT(p) AS itemCount +---- + +**Expected:** +* companyName: "Vins et alcools Chevalier" +* orderID: 10248 +* itemCount: 3 + + +== Test Case 6: Constraint Verification + +Verify that unique constraints are in place and working. + + +=== List All Constraints + +[source,cypher,role=noplay] +---- +SHOW CONSTRAINTS +---- + +**Expected:** Unique constraints for all node ID properties: +* Customer.customerID +* Order.orderID +* Product.productID +* Category.categoryID +* Supplier.supplierID +* Employee.employeeID +* Shipper.shipperID + + +=== Test Constraint Enforcement + +[source,cypher,role=noplay] +---- +// This should fail if constraint is working +CREATE (c:Customer {customerID: 'ALFKI', companyName: 'Duplicate Test'}); +---- + +**Expected:** Error - constraint violation for duplicate customerID. + + +== Organizing Validation Queries in Neo4j Aura + +In Neo4j Aura, create a folder structure to organize validation queries. These queries are reusable for any import project. + + +=== Folder: Validation-01-Node-Counts + +Save these queries from Test Case 1: + +* `count-all-nodes.cypher` - The query that counts all node types at once +* `count-customers.cypher` - Individual Customer count verification +* `count-orders.cypher` - Individual Order count verification +* `count-products.cypher` - Individual Product count verification + + +=== Folder: Validation-02-Relationship-Counts + +Save these queries from Test Case 2: + +* `count-all-relationships.cypher` - The query that counts all relationship types +* `count-placed.cypher` - PLACED relationship count +* `count-contains.cypher` - CONTAINS relationship count +* `count-reports-to.cypher` - REPORTS_TO relationship count + + +=== Folder: Validation-03-Referential-Integrity + +Save these queries from Test Case 3: + +* `find-orphan-orders.cypher` - Orders without a customer relationship +* `find-orphan-products.cypher` - Products without a category +* `find-employees-without-manager.cypher` - Employees without REPORTS_TO (should only return CEO) + + +=== Folder: Validation-04-Property-Checks + +Save these queries from Test Case 4: + +* `check-date-types.cypher` - Verify orderDate is a date type +* `check-empty-strings.cypher` - Find empty strings that should be NULL +* `check-numeric-types.cypher` - Verify unitPrice is numeric + + +=== Folder: Validation-05-Sample-Data + +Save these queries from Test Case 5: + +* `validate-customer-alfki.cypher` - Spot-check specific customer data +* `validate-order-10248.cypher` - Spot-check order with details + + +=== Folder: Validation-06-Constraints + +Save these queries from Test Case 6: + +* `show-constraints.cypher` - List all constraints +* `test-constraint-enforcement.cypher` - Test that duplicate creation fails + +[TIP] +.Bookmark the validation test plan +==== +Bookmark this lesson. The validation test plan and queries apply to any relational-to-graph migration, not just Northwind. Adapt the specific counts and property names for your source data. +==== + + +== Validation Checklist + +Use this checklist to track your validation progress: + +[%interactive] +* [ ] Node counts match source table row counts +* [ ] Relationship counts match expected foreign key connections +* [ ] No orphan nodes (nodes missing expected relationships) +* [ ] No orphan relationships (relationships to non-existent nodes) +* [ ] Data types are correct (dates, numbers, booleans) +* [ ] No empty strings where NULL was expected +* [ ] Sample records match source data exactly +* [ ] All unique constraints are in place +* [ ] Constraints prevent duplicate creation + + +== Common Validation Issues and Solutions + +[cols="1,2,2"] +|=== +| Issue | Cause | Solution + +| Missing relationships +| Foreign key values did not match during import +| Check for case sensitivity, data type mismatches, or trimming issues + +| Duplicate nodes +| Constraint not created before import +| Delete duplicates, add constraint, re-import + +| Wrong data types +| Automatic type inference was incorrect +| Explicitly set types during import or convert after + +| Missing properties +| NULL values in source not handled +| Verify this is expected behavior; add defaults if needed + +| Count mismatch +| Filtering during import or duplicate handling +| Review import queries for WHERE clauses or MERGE behavior + +|=== + + +[.quiz] +== Check Your Understanding + +include::questions/1-data-quality.adoc[leveloffset=+1] + + +[.summary] +== Summary + +In this lesson, you learned: + +* How to create a validation test plan +* Test cases for verifying node counts, relationship counts, and referential integrity +* How to validate property values and data types +* Techniques for spot-checking sample data +* How to verify constraints are working correctly + +In the next lesson, you will compare SQL and Cypher query performance. diff --git a/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/1-validating/questions/1-data-quality.adoc b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/1-validating/questions/1-data-quality.adoc new file mode 100644 index 000000000..79c491480 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/1-validating/questions/1-data-quality.adoc @@ -0,0 +1,30 @@ +[.question] += Validation Test Cases + +Which of the following should be included in a data validation test plan after importing relational data into Neo4j? (Select all that apply) + +- [x] Verify node counts match source table row counts +- [x] Check that relationship counts match expected foreign key connections +- [x] Validate that properties have correct data types +- [x] Test that unique constraints prevent duplicate creation +- [ ] Verify that all SQL queries still work unchanged + + +[TIP,role=hint] +.Hint +==== +Think about what could go wrong during an import: missing data, wrong types, broken relationships, or duplicate records. +==== + +[TIP,role=solution] +.Solution +==== +A good validation plan should include: + +* **Node count validation** - Ensures no data was lost or duplicated +* **Relationship count validation** - Verifies foreign keys were correctly converted to relationships +* **Property type validation** - Confirms data transformation was accurate (dates as dates, numbers as numbers) +* **Constraint testing** - Ensures data integrity rules are enforced + +SQL queries will not work unchanged in Neo4j - you need to use Cypher instead. +==== diff --git a/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/images/arrows-example.json b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/images/arrows-example.json new file mode 100644 index 000000000..d264ccd7d --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/images/arrows-example.json @@ -0,0 +1,140 @@ +{ + "style": { + "font-family": "sans-serif", + "background-color": "#ffffff", + "background-image": "", + "background-size": "100%", + "node-color": "#ffffff", + "border-width": 4, + "border-color": "#000000", + "radius": 50, + "node-padding": 5, + "node-margin": 2, + "outside-position": "auto", + "node-icon-image": "", + "node-background-image": "", + "icon-position": "inside", + "icon-size": 64, + "caption-position": "inside", + "caption-max-width": 200, + "caption-color": "#000000", + "caption-font-size": 50, + "caption-font-weight": "normal", + "label-position": "inside", + "label-display": "pill", + "label-color": "#000000", + "label-background-color": "#ffffff", + "label-border-color": "#000000", + "label-border-width": 4, + "label-font-size": 40, + "label-padding": 5, + "label-margin": 4, + "directionality": "directed", + "detail-position": "inline", + "detail-orientation": "parallel", + "arrow-width": 5, + "arrow-color": "#000000", + "margin-start": 5, + "margin-end": 5, + "margin-peer": 20, + "attachment-start": "normal", + "attachment-end": "normal", + "relationship-icon-image": "", + "type-color": "#000000", + "type-background-color": "#ffffff", + "type-border-color": "#000000", + "type-border-width": 0, + "type-font-size": 16, + "type-padding": 5, + "property-position": "outside", + "property-alignment": "colon", + "property-color": "#000000", + "property-font-size": 16, + "property-font-weight": "normal" + }, + "nodes": [ + { + "id": "n0", + "position": { + "x": -146, + "y": -8 + }, + "caption": "", + "style": {}, + "labels": [ + "Customer" + ], + "properties": { + "id": "", + "name": "", + "email": "", + "address": "" + } + }, + { + "id": "n1", + "position": { + "x": -146, + "y": 292 + }, + "caption": "", + "style": {}, + "labels": [ + "Product" + ], + "properties": { + "id": "", + "name": "", + "price": "" + } + }, + { + "id": "n2", + "position": { + "x": 154, + "y": -8 + }, + "caption": "", + "style": {}, + "labels": [ + "Order" + ], + "properties": { + "id": "", + "date": "" + } + } + ], + "relationships": [ + { + "id": "n0", + "type": "PURCHASED", + "style": { + "detail-orientation": "horizontal" + }, + "properties": {}, + "fromId": "n0", + "toId": "n1" + }, + { + "id": "n1", + "type": "PLACED", + "style": {}, + "properties": {}, + "fromId": "n0", + "toId": "n2" + }, + { + "id": "n2", + "type": "CONTAINS", + "style": { + "detail-orientation": "horizontal" + }, + "properties": { + "quantity": "" + }, + "fromId": "n2", + "toId": "n1" + } + ] +} \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/images/arrows-example.svg b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/images/arrows-example.svg new file mode 100644 index 000000000..2ae900262 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/images/arrows-example.svg @@ -0,0 +1 @@ +PURCHASEDPLACEDCONTAINSquantity:Customerid:name:email:address:Productid:name:price:Orderid:date: \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/images/arrows.png b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/images/arrows.png new file mode 100644 index 000000000..4d7ca8cb5 Binary files /dev/null and b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/images/arrows.png differ diff --git a/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/lesson.adoc b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/lesson.adoc new file mode 100644 index 000000000..ac8d9546c --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/lesson.adoc @@ -0,0 +1,497 @@ += SQL vs Cypher: Query Efficiency Comparison +:order: 2 +:type: lesson + +After validating your imported data, this lesson compares query performance between the relational model and the graph model. The following examples demonstrate the efficiency differences between SQL JOINs and Cypher traversals using the Northwind data. + + +== Understanding the Performance Difference + +The fundamental difference between SQL and Cypher queries lies in how relationships are resolved: + +[cols="1,2,2"] +|=== +| Aspect | SQL (Relational) | Cypher (Graph) + +| Relationship Storage +| Implicit (foreign keys) +| Explicit (stored relationships) + +| Join Operation +| Computed at query time using indexes +| Pre-computed, direct pointer traversal + +| Performance Scaling +| Degrades with data volume and JOIN count +| Constant time per relationship hop + +| Index Dependency +| Critical for JOIN performance +| Less critical for traversals + +|=== + + +== Query Comparison 1: Simple Lookup + +**Business Question:** Find all orders for customer "ALFKI" + + +=== SQL Approach + +[source,sql] +---- +SELECT o.order_id, o.order_date, o.shipped_date +FROM orders o +JOIN customers c ON o.customer_id = c.customer_id +WHERE c.customer_id = 'ALFKI'; +---- + +**How SQL executes this:** +1. Look up customer 'ALFKI' using index on customer_id +2. Scan orders table for matching customer_id (or use index) +3. Join the results + +**Complexity:** O(log n) for indexed lookup + O(m) for matching orders + + +=== Cypher Approach + +[source,cypher] +---- +MATCH (c:Customer {customerID: 'ALFKI'})-[:PLACED]->(o:Order) +RETURN o.orderID, o.orderDate, o.shippedDate; +---- + +**How Cypher executes this:** +1. Look up customer 'ALFKI' using index on customerID +2. Follow PLACED relationship pointers directly to Order nodes +3. Return results + +**Complexity:** O(log n) for indexed lookup + O(k) where k is number of relationships (constant time per relationship) + + +=== Performance Comparison + +For this simple query, both perform similarly because: +* Single JOIN in SQL +* Single relationship hop in Cypher +* Both benefit from indexes + +**Winner:** Tie for simple lookups + + +== Query Comparison 2: Multi-Table JOIN + +**Business Question:** Find all products ordered by customer "ALFKI" with their categories + + +=== SQL Approach (3 JOINs) + +[source,sql] +---- +SELECT DISTINCT + p.product_name, + cat.category_name, + p.unit_price +FROM customers c +JOIN orders o ON c.customer_id = o.customer_id +JOIN order_details od ON o.order_id = od.order_id +JOIN products p ON od.product_id = p.product_id +JOIN categories cat ON p.category_id = cat.category_id +WHERE c.customer_id = 'ALFKI' +ORDER BY cat.category_name, p.product_name; +---- + +**How SQL executes this:** +1. Look up customer 'ALFKI' +2. JOIN to orders (scan/index lookup) +3. JOIN to order_details (scan/index lookup) +4. JOIN to products (scan/index lookup) +5. JOIN to categories (scan/index lookup) +6. Apply DISTINCT and ORDER BY + +**Complexity:** Multiple index lookups and hash/merge joins + + +=== Cypher Approach + +[source,cypher] +---- +MATCH (c:Customer {customerID: 'ALFKI'})-[:PLACED]->(o:Order) + -[:CONTAINS]->(p:Product)-[:IN_CATEGORY]->(cat:Category) +RETURN DISTINCT p.productName, cat.categoryName, p.unitPrice +ORDER BY cat.categoryName, p.productName; +---- + +**How Cypher executes this:** +1. Look up customer 'ALFKI' +2. Traverse PLACED relationships to Orders +3. Traverse CONTAINS relationships to Products +4. Traverse IN_CATEGORY relationships to Categories +5. Apply DISTINCT and ORDER BY + +**Complexity:** Index lookup + direct pointer traversal (constant time per hop) + + +=== Performance Comparison + +As JOINs increase, SQL performance degrades while Cypher remains efficient: + +[cols="1,1,1"] +|=== +| Metric | SQL | Cypher + +| Tables/Nodes involved +| 5 tables +| 4 node types + +| Join operations +| 4 JOINs +| 3 traversals + +| Index dependencies +| Needs indexes on all join columns +| Only needs index on starting node + +| Scaling behavior +| Slower with more data +| Consistent regardless of total data size + +|=== + +**Winner:** Cypher - more efficient for multi-hop queries + + +== Query Comparison 3: Variable-Depth Traversal + +**Business Question:** Find the management chain for employee Nancy Davolio + + +=== SQL Approach (Recursive CTE) + +[source,sql] +---- +WITH RECURSIVE management_chain AS ( + -- Base case: start with Nancy + SELECT employee_id, first_name, last_name, reports_to, 1 as level + FROM employees + WHERE first_name = 'Nancy' AND last_name = 'Davolio' + + UNION ALL + + -- Recursive case: find managers + SELECT e.employee_id, e.first_name, e.last_name, e.reports_to, mc.level + 1 + FROM employees e + JOIN management_chain mc ON e.employee_id = mc.reports_to +) +SELECT * FROM management_chain ORDER BY level; +---- + +**How SQL executes this:** +1. Execute base query to find Nancy +2. Iteratively execute recursive query until no more results +3. Union all results +4. Complex query plan with multiple iterations + +**Complexity:** O(n * d) where n is employees and d is hierarchy depth + + +=== Cypher Approach + +[source,cypher] +---- +MATCH path = (e:Employee {firstName: 'Nancy', lastName: 'Davolio'}) + -[:REPORTS_TO*]->(manager:Employee) +RETURN e.firstName + ' ' + e.lastName AS employee, + [n IN nodes(path) | n.firstName + ' ' + n.lastName] AS chain, + length(path) AS levels; +---- + +**How Cypher executes this:** +1. Find Nancy using index +2. Traverse REPORTS_TO relationships to any depth +3. Return path information + +**Complexity:** O(k) where k is the actual path length + + +=== Performance Comparison + +[cols="1,1,1"] +|=== +| Metric | SQL | Cypher + +| Query complexity +| Complex recursive CTE +| Simple pattern with * + +| Execution model +| Iterative with unions +| Direct traversal + +| Depth handling +| Must iterate for each level +| Handles any depth naturally + +| Code readability +| 15+ lines +| 4 lines + +|=== + +**Winner:** Cypher - simpler and more efficient for hierarchical queries (4 lines vs 15+ lines speaks for itself) + + +== Query Comparison 4: Pattern Matching + +**Business Question:** Find customers who ordered the same products as customer "ALFKI" + + +=== SQL Approach + +[source,sql] +---- +SELECT DISTINCT c2.customer_id, c2.company_name +FROM customers c1 +JOIN orders o1 ON c1.customer_id = o1.customer_id +JOIN order_details od1 ON o1.order_id = od1.order_id +JOIN order_details od2 ON od1.product_id = od2.product_id +JOIN orders o2 ON od2.order_id = o2.order_id +JOIN customers c2 ON o2.customer_id = c2.customer_id +WHERE c1.customer_id = 'ALFKI' + AND c2.customer_id != 'ALFKI' +ORDER BY c2.company_name; +---- + +**How SQL executes this:** +1. Find ALFKI's orders +2. Find products in those orders +3. Find other order_details with same products +4. Find orders containing those details +5. Find customers who placed those orders +6. Exclude ALFKI + +**Complexity:** 5 JOINs with potential for large intermediate result sets + + +=== Cypher Approach + +[source,cypher] +---- +MATCH (c1:Customer {customerID: 'ALFKI'})-[:PLACED]->(:Order) + -[:CONTAINS]->(p:Product)<-[:CONTAINS]-(:Order)<-[:PLACED]-(c2:Customer) +WHERE c1 <> c2 +RETURN DISTINCT c2.customerID, c2.companyName +ORDER BY c2.companyName; +---- + +**How Cypher executes this:** +1. Find ALFKI +2. Traverse to their ordered products +3. Traverse back through other orders to other customers +4. Filter out ALFKI + +**Complexity:** Direct bidirectional traversal + + +=== Performance Comparison + +[cols="1,1,1"] +|=== +| Metric | SQL | Cypher + +| Join operations +| 5 JOINs +| 4 traversals (bidirectional) + +| Pattern clarity +| Obscured by JOIN syntax +| Visual pattern matching + +| Intermediate results +| Large join products +| Only relevant paths + +| Query intent +| Hard to understand +| Clear and readable + +|=== + +**Winner:** Cypher - pattern matching is what graphs were built for + + +== Query Comparison 5: Aggregation with Relationships + +**Business Question:** Find the top 5 customers by total order value + + +=== SQL Approach + +[source,sql] +---- +SELECT + c.customer_id, + c.company_name, + COUNT(DISTINCT o.order_id) AS order_count, + SUM(od.unit_price * od.quantity * (1 - od.discount)) AS total_value +FROM customers c +JOIN orders o ON c.customer_id = o.customer_id +JOIN order_details od ON o.order_id = od.order_id +GROUP BY c.customer_id, c.company_name +ORDER BY total_value DESC +LIMIT 5; +---- + + +=== Cypher Approach + +[source,cypher] +---- +MATCH (c:Customer)-[:PLACED]->(o:Order)-[item:CONTAINS]->(p:Product) +WITH c, COUNT(DISTINCT o) AS orderCount, + SUM(item.unitPrice * item.quantity * (1 - item.discount)) AS totalValue +ORDER BY totalValue DESC +LIMIT 5 +RETURN c.customerID, c.companyName, orderCount, totalValue; +---- + + +=== Performance Comparison + +For aggregation queries, both databases perform similarly because: +* Both must scan all relevant data +* Both can use indexes for initial filtering +* Aggregation computation is similar + +**Winner:** Tie for aggregation-heavy queries + + +== When SQL Outperforms Cypher + +SQL can be more efficient for: + +[cols="1,2"] +|=== +| Scenario | Reason + +| Simple aggregations without relationships +| No traversal benefit; relational optimization is mature + +| Bulk data operations +| SQL batch operations can be highly optimized + +| Single-table queries +| No relationship traversal needed + +| Complex mathematical computations +| SQL has more mature numeric functions + +|=== + + +== When Cypher Outperforms SQL + +Cypher excels at: + +[cols="1,2"] +|=== +| Scenario | Reason + +| Multi-hop relationship queries +| Direct traversal vs. multiple JOINs + +| Variable-depth paths +| Native support vs. recursive CTEs + +| Pattern matching +| Built-in pattern syntax vs. complex JOINs + +| Real-time recommendations +| Fast traversal for "customers who bought X also bought Y" + +| Network/hierarchy analysis +| Shortest path, centrality algorithms built-in + +|=== + + +== Performance Summary + +[cols="1,1,1,1"] +|=== +| Query Type | SQL Performance | Cypher Performance | Winner + +| Simple lookup +| Fast +| Fast +| Tie + +| 2-3 table JOIN +| Good +| Good +| Slight edge to Cypher + +| 4+ table JOIN +| Degrades +| Consistent +| Cypher + +| Recursive/hierarchical +| Complex, slow +| Simple, fast +| Cypher + +| Pattern matching +| Very complex +| Natural +| Cypher + +| Bulk aggregation +| Optimized +| Good +| Slight edge to SQL + +|=== + + +== Organizing Query Examples in Neo4j Aura + +The Cypher queries in this lesson demonstrate common query patterns. Save them in Neo4j Aura for reference: + +* **Folder: `Query-Patterns-Simple`** - Save the simple lookup query from Query Comparison 1 +* **Folder: `Query-Patterns-Multi-Hop`** - Save the multi-hop traversal query from Query Comparison 2 +* **Folder: `Query-Patterns-Hierarchical`** - Save the variable-depth path query from Query Comparison 3 +* **Folder: `Query-Patterns-Matching`** - Save the pattern matching query from Query Comparison 4 +* **Folder: `Query-Patterns-Aggregation`** - Save the aggregation query from Query Comparison 5 + +These queries serve as templates. Adapt them to your specific node labels and relationship types when working with other datasets. + +[TIP] +.Bookmark the performance comparison table +==== +Bookmark this lesson. The performance comparison table at the end summarizes when to use graph traversals versus when SQL-style aggregations may be more appropriate. This guidance applies beyond Northwind to any graph database project. +==== + + +[.quiz] +== Check Your Understanding + +include::questions/1-data-model.adoc[leveloffset=+1] + +include::questions/2-traversal.adoc[leveloffset=+1] + + +[.summary] +== Summary + +In this lesson, you learned: + +* How SQL JOINs differ from Cypher traversals at a fundamental level +* Query comparisons for simple lookups, multi-table JOINs, hierarchical queries, and pattern matching +* When Cypher outperforms SQL (multi-hop, variable-depth, pattern matching) +* When SQL may be preferable (simple aggregations, bulk operations) +* How to choose the right query approach for your use case + +In the next lesson, you will find resources for continuing your learning journey. diff --git a/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/questions/1-data-model.adoc b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/questions/1-data-model.adoc new file mode 100644 index 000000000..0db3b5c17 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/questions/1-data-model.adoc @@ -0,0 +1,32 @@ +[.question] += SQL vs Cypher Performance + +For which type of query does Cypher typically outperform SQL? + +- [ ] Simple aggregations on a single table +- [ ] Bulk insert operations +- [x] Queries requiring 4 or more table JOINs +- [ ] Mathematical computations + + +[TIP,role=hint] +.Hint +==== +Think about where graph traversal has an advantage over computing JOINs at query time. +==== + +[TIP,role=solution] +.Solution +==== +**Cypher outperforms SQL for queries requiring multiple JOINs** (4 or more tables). + +Why? +* SQL JOINs are computed at query time, requiring index lookups for each join +* Cypher traversals follow pre-computed relationship pointers (constant time per hop) +* As JOIN count increases, SQL performance degrades while Cypher remains consistent + +SQL may be faster for: +* Simple single-table aggregations (no traversal benefit) +* Bulk operations (mature optimization) +* Mathematical computations (more mature functions) +==== diff --git a/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/questions/2-traversal.adoc b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/questions/2-traversal.adoc new file mode 100644 index 000000000..163a6f243 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/2-querying/questions/2-traversal.adoc @@ -0,0 +1,40 @@ +[.question] += Hierarchical Queries + +You need to find all managers in an employee's reporting chain up to the CEO. Which approach is more efficient and why? + +- [ ] SQL with multiple self-joins - one for each level +- [ ] SQL with a recursive CTE - iterates until complete +- [x] Cypher with variable-length path - direct traversal +- [ ] Both are equally efficient + + +[TIP,role=hint] +.Hint +==== +Consider how each approach handles unknown depth in a hierarchy. +==== + +[TIP,role=solution] +.Solution +==== +**Cypher with variable-length paths** is most efficient for hierarchical queries. + +[source,cypher] +---- +MATCH (e:Employee)-[:REPORTS_TO*]->(manager:Employee) +WHERE e.firstName = 'Nancy' +RETURN manager +---- + +Why Cypher wins: +* The `*` operator handles any depth naturally +* Direct relationship traversal (no iteration needed) +* Simple, readable syntax + +SQL alternatives are less efficient: +* Multiple self-joins require knowing the max depth in advance +* Recursive CTEs iterate for each level, building unions +* Both approaches are more complex and slower +==== + diff --git a/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/3-next-steps/lesson.adoc b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/3-next-steps/lesson.adoc new file mode 100644 index 000000000..9d1d1ba88 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/3-next-steps/lesson.adoc @@ -0,0 +1,206 @@ += Congratulations and Next Steps +:order: 4 +:type: lesson + +Congratulations on completing "Importing Relational Data into Neo4j". + +You have worked through the entire process of migrating data from a relational database into Neo4j: + +* Analyzing relational schemas and understanding table relationships +* Designing a graph data model from relational tables +* Mapping foreign keys to graph relationships +* Planning constraints and indexes for data integrity +* Using the Neo4j Data Importer to import data +* Validating and querying your imported graph + + +== Apply This to Your Own PostgreSQL Data + +If you want to migrate your own PostgreSQL database to Neo4j, follow these steps: + + +=== Phase 1: Analyze Your Schema + +. **Document your tables** - List all tables in your database using: ++ +[source,sql] +---- +SELECT table_name +FROM information_schema.tables +WHERE table_schema = 'public'; +---- + +. **Identify foreign keys** - Find all relationships between tables: ++ +[source,sql] +---- +SELECT + tc.table_name AS source_table, + kcu.column_name AS foreign_key, + ccu.table_name AS target_table, + ccu.column_name AS target_column +FROM information_schema.table_constraints tc +JOIN information_schema.key_column_usage kcu + ON tc.constraint_name = kcu.constraint_name +JOIN information_schema.constraint_column_usage ccu + ON ccu.constraint_name = tc.constraint_name +WHERE tc.constraint_type = 'FOREIGN KEY'; +---- + +. **Categorize your tables** using the framework from Lesson 2.2: + * Entity tables → Nodes + * Junction tables → Relationships + * Lookup tables → Properties or small nodes + * Audit tables → Evaluate if needed in graph + + +=== Phase 2: Design Your Graph Model + +. **Create a visual model** using link:https://arrows.app[Arrows.app^] +. **Define node labels** - Use singular PascalCase names (e.g., `Customer`, `Order`) +. **Define relationship types** - Use UPPER_SNAKE_CASE verbs (e.g., `PLACED`, `CONTAINS`) +. **Plan properties** - Decide which columns become properties and apply camelCase naming +. **Identify constraints** - Determine unique identifiers for each node type + + +=== Phase 3: Prepare Your Import + +. **Create constraints first** - Adapt the constraint script from Lesson 2.5: ++ +[source,cypher] +---- +CREATE CONSTRAINT your_node_id IF NOT EXISTS +FOR (n:YourLabel) REQUIRE n.yourID IS UNIQUE; +---- + +. **Plan import order** - Follow the dependency chain: + .. Independent nodes (no foreign keys) + .. Dependent nodes (reference other nodes) + .. Relationships + + +=== Phase 4: Execute the Import + +. **Connect your PostgreSQL database** to the Data Importer (see Lesson 1.2) +. **Map tables to nodes** following your graph model design +. **Set unique identifiers** for each node type +. **Create relationships** by mapping foreign key columns +. **Run the import** and monitor for errors + + +=== Phase 5: Validate Your Import + +. **Run node count queries** - Compare with source table counts +. **Run relationship count queries** - Compare with foreign key counts +. **Check for orphan nodes** - Find nodes missing expected relationships +. **Spot-check sample records** - Verify data accuracy +. **Test your use case queries** - Confirm the graph model supports your requirements + + +=== Quick Reference Checklist + +Use this checklist when migrating your own data: + +[%interactive] +* [ ] Schema documented (tables, columns, foreign keys) +* [ ] Tables categorized (entity, junction, lookup, audit) +* [ ] Graph model designed in Arrows.app +* [ ] Node labels and relationship types defined +* [ ] Constraints planned for all node types +* [ ] Import order determined +* [ ] PostgreSQL connected to Data Importer +* [ ] Nodes imported with unique identifiers +* [ ] Relationships created from foreign keys +* [ ] Validation queries executed +* [ ] Sample data verified + + +== Continue Your Learning Journey + +You can continue your Neo4j learning on link:https://graphacademy.neo4j.com[GraphAcademy^] with the following courses: + +* link:https://graphacademy.neo4j.com/courses/importing-cypher/[Importing CSV data into Neo4j^] - Learn how to import CSV data into Neo4j using Cypher for more complex transformations. +* link:https://graphacademy.neo4j.com/courses/cypher-intermediate-queries/[Intermediate Cypher Queries^] - Expand your Cypher skills with more advanced query patterns. +* link:https://graphacademy.neo4j.com/courses/llm-vectors-unstructured[Introduction to Vector Indexes and Unstructured Data^] - Understand and search unstructured data using vector indexes. + + +== Additional Resources + +You may also find these resources helpful: + +* link:https://neo4j.com/docs/getting-started/data-import[Import your data into Neo4j^] - Neo4j Getting Started Guide +* link:https://neo4j.com/docs/data-importer/current/[Data Importer Documentation^] - Complete reference for the Data Importer tool +* link:https://neo4j.com/developer/data-modeling/[Graph Data Modeling Guidelines^] - Best practices for designing graph models + + +== Lessons to Bookmark + +The following lessons contain reference material you will return to in future projects. Bookmark them now: + +* **Lesson 1.1: Comparing relational and graph data** - The relational-to-graph mapping table +* **Lesson 2.2: Identifying Nodes from Tables** - The mapping table and misconception corrections +* **Lesson 2.3: Mapping Relationships** - The four common misconceptions about foreign key transformation +* **Lesson 2.5: Planning Constraints and Indexes** - Constraint and index creation scripts +* **Lesson 3.5: Handling Complex Data Scenarios** - The nine best practices checklist +* **Lesson 4.1: Validating Imported Data** - The validation test plan and queries +* **Lesson 4.2: SQL vs Cypher: Query Efficiency Comparison** - The performance comparison summary table + + +== Recommended Query Folder Structure in Neo4j Aura + +When working in Neo4j Aura, organize your saved queries using this folder structure. The numbered prefixes indicate execution order: + +[source] +---- +01-Setup-Constraints/ +02-Setup-Indexes/ +03-Import-Independent-Nodes/ +04-Import-Dependent-Nodes/ +05-Import-Transaction-Nodes/ +06-Create-Relationships/ +Validation-01-Node-Counts/ + count-all-nodes.cypher + count-customers.cypher + count-orders.cypher + count-products.cypher +Validation-02-Relationship-Counts/ + count-all-relationships.cypher + count-placed.cypher + count-contains.cypher +Validation-03-Referential-Integrity/ + find-orphan-orders.cypher + find-orphan-products.cypher + find-employees-without-manager.cypher +Validation-04-Property-Checks/ + check-date-types.cypher + check-empty-strings.cypher + check-numeric-types.cypher +Validation-05-Sample-Data/ + validate-customer-alfki.cypher + validate-order-10248.cypher +Validation-06-Constraints/ + show-constraints.cypher + test-constraint-enforcement.cypher +Query-Patterns-Simple/ +Query-Patterns-Multi-Hop/ +Query-Patterns-Hierarchical/ +Query-Patterns-Matching/ +Query-Patterns-Aggregation/ +Maintenance-Cleanup/ +Maintenance-Monitoring/ +Admin-Verification/ +---- + +This structure applies to any import project. Adapt the specific queries for your source data. + + +[.quiz] +== Check Your Understanding + +include::questions/1-course-complete.adoc[leveloffset=+1] + + +[.summary] +== Summary + +This course has provided the foundational skills for migrating relational data into Neo4j. You can now analyze relational schemas, design appropriate graph models, execute imports, and validate the results. These skills apply to any relational-to-graph migration project, regardless of the source database or domain. \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/3-next-steps/questions/1-course-complete.adoc b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/3-next-steps/questions/1-course-complete.adoc new file mode 100644 index 000000000..200ac63c9 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/lessons/3-next-steps/questions/1-course-complete.adoc @@ -0,0 +1,29 @@ +[.question] += Course Completion + +Which of the following are benefits of migrating relational data to a graph database? (Select all that apply) + +- [x] Relationships become explicit and first-class citizens +- [x] Complex JOIN queries are replaced by simple traversals +- [x] The data model can evolve more flexibly +- [ ] All data must be normalized to third normal form + + +[TIP,role=hint] +.Hint +==== +Think about the differences between relational and graph databases that you learned throughout this course. +==== + +[TIP,role=solution] +.Solution +==== +The benefits of migrating to a graph database include: + +* **Relationships become explicit** - Unlike foreign keys, graph relationships are stored directly and can have properties +* **Simple traversals replace JOINs** - Following relationships is a constant-time operation +* **Flexible schema** - Graph databases allow the model to evolve without rigid schema changes + +Graph databases do not require normalization - in fact, some denormalization can improve query performance. +==== + diff --git a/asciidoc/courses/importing-relational-to-graph/modules/4-validating/module.adoc b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/module.adoc new file mode 100644 index 000000000..bdcd2e986 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/modules/4-validating/module.adoc @@ -0,0 +1,14 @@ += Validating and Querying +:order: 4 + +In this module, you will validate your imported data and compare query performance between SQL and Cypher. + +You will: + +* Create a test plan for validating imported data +* Execute test cases to verify data integrity +* Compare SQL JOIN queries with Cypher traversals +* Understand when graph queries outperform relational queries + + +link:./1-validating/[Ready? Let's go →, role=btn] diff --git a/asciidoc/courses/importing-relational-to-graph/promo.adoc b/asciidoc/courses/importing-relational-to-graph/promo.adoc new file mode 100644 index 000000000..2413fdba0 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/promo.adoc @@ -0,0 +1,4 @@ +[.promo.promo-graphacademy] +==== +Explore data importing options with the link:https://graphacademy.neo4j.com/courses/importing-fundamentals/?ref=docs-promo-import[Importing Data Fundamentals course on GraphAcademy^]. +==== diff --git a/asciidoc/courses/importing-relational-to-graph/shared/solution.adoc b/asciidoc/courses/importing-relational-to-graph/shared/solution.adoc new file mode 100644 index 000000000..d2f574660 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/shared/solution.adoc @@ -0,0 +1,9 @@ +:solution-url: https://data.neo4j.com/importing-fundamentals/{solution-filename} + +This Data Importer model, link:{solution-url}[{solution-filename}^], contains a working solution for this exercise. + +Download the link:{solution-url}[model^] and open it using the `Open model (with data) button` in the `...` menu. + +image::{cdn-url}/img/courses/shared/open-model-data-annotated.png[The Open model (with data) button highlighted in the menu.] + +Note that this will replace your existing model. \ No newline at end of file diff --git a/asciidoc/courses/importing-relational-to-graph/summary.adoc b/asciidoc/courses/importing-relational-to-graph/summary.adoc new file mode 100644 index 000000000..0d3465cf4 --- /dev/null +++ b/asciidoc/courses/importing-relational-to-graph/summary.adoc @@ -0,0 +1,17 @@ += Course Summary + +Congratulations on completing "Importing Data Fundamentals"! + +You have learned: + +* The different ways to import data into Neo4j +* About the different tools and techniques available to import data +* How to import data into Neo4j using the Neo4j Data Importer. +* How your source data may affect your data import process and model. + +Continue your learning with the following resources: + +* link:https://graphacademy.neo4j.com[GraphAcademy^] - Free online training for Neo4j +* link:https://graphacademy.neo4j.com/courses/importing-cypher/[Importing CSV data into Neo4j^] - Learn how to import CSV data into Neo4j using Cypher. +* link:https://graphacademy.neo4j.com/courses/llm-vectors-unstructured[Introduction to Vector Indexes and Unstructured Data^] - Understand and search unstructured data using vector indexes. +* link:https://neo4j.com/docs/getting-started/data-import[Import your data into Neo4j] in the link:https://neo4j.com/docs/getting-started/[Neo4j Getting Started Guide]. \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index fb12e0c5b..38055c876 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ }, "devDependencies": { "@asciidoctor/core": "^2.2.6", + "@mermaid-js/mermaid-cli": "^10.9.1", "@types/node": "^18.11.9", "@types/pug": "^2.0.6", "cypress": "^13.16.1", @@ -615,6 +616,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@braintree/sanitize-url": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz", + "integrity": "sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==", + "dev": true, + "license": "MIT" + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -1212,6 +1220,277 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@mermaid-js/mermaid-cli": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-10.9.1.tgz", + "integrity": "sha512-ajpGUKmB5YbRRzrFR+0dbykF9mTvce4FpHWGYPYTry8ZsOgP6h7SUnojyCJDGgbReCnArODCM8L212qIcxshIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.0.1", + "commander": "^10.0.0", + "mermaid": "^10.8.0", + "puppeteer": "^19.0.0" + }, + "bin": { + "mmdc": "src/cli.js" + }, + "engines": { + "node": "^14.13 || >=16.0" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/@puppeteer/browsers": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", + "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=14.1.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/chromium-bidi": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", + "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "mitt": "3.0.0" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/devtools-protocol": { + "version": "0.0.1107588", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", + "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/puppeteer": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", + "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "deprecated": "< 24.15.0 is no longer supported", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "cosmiconfig": "8.1.3", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.11.1" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/puppeteer-core": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", + "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "chromium-bidi": "0.4.7", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" + }, + "engines": { + "node": ">=14.14.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -1347,6 +1626,40 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -1384,6 +1697,23 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "18.11.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", @@ -1432,9 +1762,17 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, "license": "MIT", "optional": true }, + "node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/yargs": { "version": "17.0.33", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", @@ -2033,6 +2371,43 @@ "node": ">=8" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/blob-util": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", @@ -2364,6 +2739,17 @@ "node": ">=10" } }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/character-parser": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", @@ -2409,6 +2795,13 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "license": "ISC" + }, "node_modules/chromium-bidi": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.8.0.tgz", @@ -2667,34 +3060,114 @@ "dev": true, "license": "MIT" }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "layout-base": "^1.0.0" } }, - "node_modules/create-require": { + "node_modules/cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -2852,188 +3325,756 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "node_modules/cytoscape": { + "version": "3.33.1", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.1.tgz", + "integrity": "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==", "dev": true, "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - }, "engines": { "node": ">=0.10" } }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 14" + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" } }, - "node_modules/dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "node_modules/d3": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "license": "MIT", + "license": "ISC", "dependencies": { - "ms": "^2.1.3" + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=12" } }, - "node_modules/dedent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } + "engines": { + "node": ">=12" } }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/degenerator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", - "license": "MIT", + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dev": true, + "license": "ISC", "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" + "d3-path": "1 - 3" }, "engines": { - "node": ">= 14" + "node": ">=12" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=0.4.0" + "node": ">=12" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "d3-array": "^3.2.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=12" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "delaunator": "5" + }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=12" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/devtools-protocol": { - "version": "0.0.1367902", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1367902.tgz", - "integrity": "sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==", - "license": "BSD-3-Clause" + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", "dev": true, + "license": "ISC", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, "engines": { - "node": ">=0.3.1" + "node": ">=12" } }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 10" } }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "node_modules/d3-dsv/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/dompurify": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz", - "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==", - "license": "(MPL-2.0 OR Apache-2.0)", - "optional": true, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", + "dev": true, + "license": "ISC" + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dagre-d3-es": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.13.tgz", + "integrity": "sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "d3": "^7.9.0", + "lodash-es": "^4.17.21" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dedent": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "dev": true, + "license": "ISC", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1367902", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1367902.tgz", + "integrity": "sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==", + "license": "BSD-3-Clause" + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/dompurify": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz", + "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==", + "devOptional": true, + "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" } @@ -3093,6 +4134,13 @@ "dev": true, "license": "ISC" }, + "node_modules/elkjs": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.3.tgz", + "integrity": "sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==", + "dev": true, + "license": "EPL-2.0" + }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", @@ -3663,6 +4711,13 @@ "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT" + }, "node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -4248,6 +5303,16 @@ "node": ">=10" } }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/iobuffer": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/iobuffer/-/iobuffer-5.4.0.tgz", @@ -5409,6 +6474,39 @@ "promise": "^7.0.1" } }, + "node_modules/katex": { + "version": "0.16.25", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.25.tgz", + "integrity": "sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==", + "dev": true, + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/khroma": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", + "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==", + "dev": true + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -5419,6 +6517,13 @@ "node": ">=6" } }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", + "dev": true, + "license": "MIT" + }, "node_modules/lazy-ass": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", @@ -5490,6 +6595,13 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", @@ -5596,60 +6708,605 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/mermaid": { + "version": "10.9.5", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.9.5.tgz", + "integrity": "sha512-eRlKEjzak4z1rcXeCd1OAlyawhrptClQDo8OuI8n6bSVqJ9oMfd5Lrf3Q+TdJHewi/9AIOc3UmEo8Fz+kNzzuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@braintree/sanitize-url": "^6.0.1", + "@types/d3-scale": "^4.0.3", + "@types/d3-scale-chromatic": "^3.0.0", + "cytoscape": "^3.28.1", + "cytoscape-cose-bilkent": "^4.1.0", + "d3": "^7.4.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.13", + "dayjs": "^1.11.7", + "dompurify": "^3.2.4", + "elkjs": "^0.9.0", + "katex": "^0.16.9", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "mdast-util-from-markdown": "^1.3.0", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.3", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + } + }, + "node_modules/mermaid/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", "dev": true, - "license": "BSD-3-Clause", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "tmpl": "1.0.5" + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/math-intrinsics": { + "node_modules/micromark-util-resolve-all": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "micromark-util-types": "^1.0.0" } }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", "dev": true, - "engines": { - "node": ">= 0.6" - } + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, "node_modules/micromatch": { "version": "4.0.8", @@ -5745,6 +7402,23 @@ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "license": "MIT" }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -6014,6 +7688,13 @@ "url": "https://opencollective.com/nodemon" } }, + "node_modules/non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==", + "dev": true, + "license": "MIT" + }, "node_modules/nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", @@ -6334,6 +8015,16 @@ "dev": true, "license": "MIT" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -6834,6 +8525,21 @@ "dev": true, "license": "MIT" }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -6943,6 +8649,20 @@ "node": ">= 0.8.15" } }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", @@ -6951,6 +8671,19 @@ "tslib": "^2.1.0" } }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -7426,6 +9159,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "dev": true, + "license": "MIT" + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -7657,6 +9397,16 @@ "tree-kill": "cli.js" } }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -7844,6 +9594,20 @@ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, + "node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -7919,6 +9683,13 @@ "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", "license": "MIT" }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -7947,6 +9718,45 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uvu/node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/uvu/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -8023,6 +9833,13 @@ "makeerror": "1.0.12" } }, + "node_modules/web-worker": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.5.0.tgz", + "integrity": "sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -8643,6 +10460,12 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@braintree/sanitize-url": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz", + "integrity": "sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==", + "dev": true + }, "@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -9076,34 +10899,211 @@ "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@mermaid-js/mermaid-cli": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-10.9.1.tgz", + "integrity": "sha512-ajpGUKmB5YbRRzrFR+0dbykF9mTvce4FpHWGYPYTry8ZsOgP6h7SUnojyCJDGgbReCnArODCM8L212qIcxshIw==", + "dev": true, + "requires": { + "chalk": "^5.0.1", + "commander": "^10.0.0", + "mermaid": "^10.8.0", + "puppeteer": "^19.0.0" + }, + "dependencies": { + "@puppeteer/browsers": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", + "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", + "dev": true, + "requires": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true + }, + "chromium-bidi": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", + "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", + "dev": true, + "requires": { + "mitt": "3.0.0" + } + }, + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "devtools-protocol": { + "version": "0.0.1107588", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", + "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", + "dev": true + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "puppeteer": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", + "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "dev": true, + "requires": { + "@puppeteer/browsers": "0.5.0", + "cosmiconfig": "8.1.3", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.11.1" + } + }, + "puppeteer-core": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", + "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", + "dev": true, + "requires": { + "@puppeteer/browsers": "0.5.0", + "chromium-bidi": "0.4.7", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" + } + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "requires": {} + }, + "yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" } } } }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", - "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -9220,6 +11220,36 @@ "@babel/types": "^7.20.7" } }, + "@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "dev": true, + "requires": { + "@types/d3-time": "*" + } + }, + "@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", + "dev": true + }, + "@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "dev": true + }, + "@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "requires": { + "@types/ms": "*" + } + }, "@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -9253,6 +11283,21 @@ "@types/istanbul-lib-report": "*" } }, + "@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "dev": true, + "requires": { + "@types/unist": "^2" + } + }, + "@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true + }, "@types/node": { "version": "18.11.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", @@ -9298,8 +11343,15 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, "optional": true }, + "@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "dev": true + }, "@types/yargs": { "version": "17.0.33", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", @@ -9718,6 +11770,29 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + } + } + }, "blob-util": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", @@ -9941,6 +12016,12 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, + "character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true + }, "character-parser": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", @@ -9972,6 +12053,12 @@ "readdirp": "~3.6.0" } }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, "chromium-bidi": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.8.0.tgz", @@ -10152,6 +12239,44 @@ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true }, + "cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "dev": true, + "requires": { + "layout-base": "^1.0.0" + } + }, + "cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "dev": true, + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + } + } + }, "create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -10173,6 +12298,26 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dev": true, + "requires": { + "node-fetch": "2.6.7" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, "cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -10266,23 +12411,401 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cytoscape": { + "version": "3.33.1", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.1.tgz", + "integrity": "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==", + "dev": true + }, + "cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "dev": true, + "requires": { + "cose-base": "^1.0.0" + } + }, + "d3": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "dev": true, + "requires": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + } + }, + "d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dev": true, + "requires": { + "internmap": "1 - 2" + } + }, + "d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "dev": true + }, + "d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dev": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + } + }, + "d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dev": true, + "requires": { + "d3-path": "1 - 3" + } + }, + "d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "dev": true + }, + "d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "dev": true, + "requires": { + "d3-array": "^3.2.0" + } + }, + "d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dev": true, + "requires": { + "delaunator": "5" + } + }, + "d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "dev": true + }, + "d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dev": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + } + }, + "d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dev": true, + "requires": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "dev": true + }, + "d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dev": true, + "requires": { + "d3-dsv": "1 - 3" + } + }, + "d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dev": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "dev": true + }, + "d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "dev": true, + "requires": { + "d3-array": "2.5.0 - 3" + } + }, + "d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "dev": true + }, + "d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dev": true, + "requires": { + "d3-color": "1 - 3" + } + }, + "d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "dev": true + }, + "d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "dev": true + }, + "d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "dev": true + }, + "d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "dev": true + }, + "d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "dev": true, + "requires": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + }, + "dependencies": { + "d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dev": true, + "requires": { + "internmap": "^1.0.0" + } + }, + "d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", "dev": true }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "d3-path": "1" } + }, + "internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", + "dev": true } } }, + "d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dev": true, + "requires": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + } + }, + "d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "dev": true, + "requires": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + } + }, + "d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "dev": true + }, + "d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dev": true, + "requires": { + "d3-path": "^3.1.0" + } + }, + "d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dev": true, + "requires": { + "d3-array": "2 - 3" + } + }, + "d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dev": true, + "requires": { + "d3-time": "1 - 3" + } + }, + "d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "dev": true + }, + "d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dev": true, + "requires": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dev": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + } + }, + "dagre-d3-es": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.13.tgz", + "integrity": "sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==", + "dev": true, + "requires": { + "d3": "^7.9.0", + "lodash-es": "^4.17.21" + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -10311,6 +12834,15 @@ "ms": "^2.1.3" } }, + "decode-named-character-reference": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "dev": true, + "requires": { + "character-entities": "^2.0.0" + } + }, "dedent": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", @@ -10345,6 +12877,15 @@ "esprima": "^4.0.1" } }, + "delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "dev": true, + "requires": { + "robust-predicates": "^3.0.2" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -10357,6 +12898,12 @@ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true + }, "destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -10396,7 +12943,7 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz", "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==", - "optional": true, + "devOptional": true, "requires": { "@types/trusted-types": "^2.0.7" } @@ -10445,6 +12992,12 @@ "integrity": "sha512-lur7L4BFklgepaJxj4DqPk7vKbTEl0pajNlg2QjE5shefmlmBLm2HvQ7PMf1R/GvlevT/581cop33/quQcfX3A==", "dev": true }, + "elkjs": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.3.tgz", + "integrity": "sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==", + "dev": true + }, "emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", @@ -10857,6 +13410,12 @@ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, "fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -11244,6 +13803,12 @@ "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true }, + "internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "dev": true + }, "iobuffer": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/iobuffer/-/iobuffer-5.4.0.tgz", @@ -12088,12 +14653,41 @@ "promise": "^7.0.1" } }, + "katex": { + "version": "0.16.25", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.25.tgz", + "integrity": "sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==", + "dev": true, + "requires": { + "commander": "^8.3.0" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + } + } + }, + "khroma": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", + "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==", + "dev": true + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, + "layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", + "dev": true + }, "lazy-ass": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", @@ -12142,6 +14736,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "dev": true + }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", @@ -12229,6 +14829,35 @@ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true }, + "mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + } + }, + "mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0" + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -12247,12 +14876,280 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "mermaid": { + "version": "10.9.5", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.9.5.tgz", + "integrity": "sha512-eRlKEjzak4z1rcXeCd1OAlyawhrptClQDo8OuI8n6bSVqJ9oMfd5Lrf3Q+TdJHewi/9AIOc3UmEo8Fz+kNzzuQ==", + "dev": true, + "requires": { + "@braintree/sanitize-url": "^6.0.1", + "@types/d3-scale": "^4.0.3", + "@types/d3-scale-chromatic": "^3.0.0", + "cytoscape": "^3.28.1", + "cytoscape-cose-bilkent": "^4.1.0", + "d3": "^7.4.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.13", + "dayjs": "^1.11.7", + "dompurify": "^3.2.4", + "elkjs": "^0.9.0", + "katex": "^0.16.9", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "mdast-util-from-markdown": "^1.3.0", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.3", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + }, + "dependencies": { + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true + } + } + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true }, + "micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "dev": true, + "requires": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "dev": true, + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "dev": true, + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "dev": true, + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "dev": true, + "requires": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "dev": true, + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "dev": true, + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "dev": true, + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "dev": true, + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "dev": true + }, + "micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "dev": true + }, + "micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "dev": true, + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "dev": true, + "requires": { + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "dev": true, + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "dev": true + }, + "micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "dev": true + }, "micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -12316,6 +15213,18 @@ "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -12509,6 +15418,12 @@ "undefsafe": "^2.0.5" } }, + "non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==", + "dev": true + }, "nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", @@ -12729,6 +15644,12 @@ "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "dev": true }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -13110,6 +16031,17 @@ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -13187,6 +16119,18 @@ "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", "optional": true }, + "robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "dev": true + }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "dev": true + }, "rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", @@ -13195,6 +16139,15 @@ "tslib": "^2.1.0" } }, + "sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "requires": { + "mri": "^1.1.0" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -13531,6 +16484,12 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -13706,6 +16665,12 @@ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true }, + "ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true + }, "ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -13820,6 +16785,15 @@ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, + "unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0" + } + }, "universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -13859,6 +16833,12 @@ "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -13880,6 +16860,32 @@ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, + "uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dev": true, + "requires": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "dependencies": { + "diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true + }, + "kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true + } + } + }, "v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -13941,6 +16947,12 @@ "makeerror": "1.0.12" } }, + "web-worker": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.5.0.tgz", + "integrity": "sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==", + "dev": true + }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", diff --git a/package.json b/package.json index 8bbfc3e2e..99874b0f3 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "generate:ogimages": "ts-node src/commands/generate-images.ts", "generate:pdfs": "ts-node src/commands/generate-pdfs.ts", "generate:slides": "ts-node src/commands/generate-slides.ts", + "compile:mermaid": "ts-node src/commands/compile-mermaid.ts", "cdn:sync": "aws s3 cp --acl public-read --recursive public s3://cdn.graphacademy.neo4j.com/assets", "cdn:guides": "aws s3 sync --acl public-read --exclude '*' --include '*workspace-guide.adoc' asciidoc/courses s3://cdn.graphacademy.neo4j.com/guides", "cdn:images": "aws s3 sync --include '**/images/*' --exclude '*.adoc' asciidoc/courses s3://cdn.graphacademy.neo4j.com/courses", @@ -52,6 +53,7 @@ }, "devDependencies": { "@asciidoctor/core": "^2.2.6", + "@mermaid-js/mermaid-cli": "^10.9.1", "@types/node": "^18.11.9", "@types/pug": "^2.0.6", "cypress": "^13.16.1", diff --git a/src/commands/compile-mermaid.ts b/src/commands/compile-mermaid.ts new file mode 100644 index 000000000..8798501a8 --- /dev/null +++ b/src/commands/compile-mermaid.ts @@ -0,0 +1,185 @@ +import fs from 'fs' +import path from 'path' +import { execSync } from 'child_process' +import { glob } from 'glob' + +interface MermaidBlock { + startLine: number + endLine: number + content: string + imageName: string +} + +/** + * Extract mermaid diagrams from AsciiDoc files + */ +function extractMermaidBlocks(filePath: string): MermaidBlock[] { + const content = fs.readFileSync(filePath, 'utf-8') + const lines = content.split('\n') + const blocks: MermaidBlock[] = [] + + let inMarkdownBlock = false + let blockStart = -1 + let mermaidContent: string[] = [] + + for (let i = 0; i < lines.length; i++) { + const line = lines[i] + + // Check for [source,markdown] followed by ---- + if (line.trim() === '[source,markdown]' && i + 1 < lines.length && lines[i + 1].trim() === '----') { + inMarkdownBlock = true + blockStart = i + mermaidContent = [] + i++ // Skip the ---- line + continue + } + + // Check for closing ---- + if (inMarkdownBlock && line.trim() === '----') { + // Check if the content looks like mermaid (starts with graph, flowchart, sequenceDiagram, etc.) + const content = mermaidContent.join('\n').trim() + if (content.match(/^(graph|flowchart|sequenceDiagram|classDiagram|stateDiagram|erDiagram|gantt|pie|gitgraph|journey|requirement)/)) { + const fileName = path.basename(filePath, '.adoc') + const blockIndex = blocks.length + const imageName = `${fileName}-diagram-${blockIndex + 1}` + + blocks.push({ + startLine: blockStart, + endLine: i, + content: content, + imageName: imageName + }) + } + + inMarkdownBlock = false + mermaidContent = [] + continue + } + + // Collect content within markdown block + if (inMarkdownBlock) { + mermaidContent.push(line) + } + } + + return blocks +} + +/** + * Compile mermaid diagram to image + */ +function compileMermaidToImage(mermaidContent: string, outputPath: string, format: 'png' | 'svg' = 'svg'): void { + // Create temporary mermaid file + const tempFile = path.join(process.cwd(), '.tmp-mermaid.mmd') + fs.writeFileSync(tempFile, mermaidContent) + + try { + // Use mermaid-cli to compile + const outputFile = `${outputPath}.${format}` + execSync(`mmdc -i "${tempFile}" -o "${outputFile}" -b transparent`, { stdio: 'inherit' }) + console.log(`✓ Generated: ${outputFile}`) + } catch (error) { + console.error(`✗ Failed to compile mermaid diagram: ${error}`) + throw error + } finally { + // Clean up temp file + if (fs.existsSync(tempFile)) { + fs.unlinkSync(tempFile) + } + } +} + +/** + * Replace mermaid block with image reference + */ +function replaceMermaidBlock(filePath: string, block: MermaidBlock, imagePath: string): void { + const content = fs.readFileSync(filePath, 'utf-8') + const lines = content.split('\n') + + // Calculate the range to replace + const beforeBlock = lines.slice(0, block.startLine).join('\n') + const afterBlock = lines.slice(block.endLine + 1).join('\n') + + // Create image reference + const relativeImagePath = path.relative(path.dirname(filePath), imagePath).replace(/\\/g, '/') + const imageRef = `image::${relativeImagePath}[Relational vs Graph Data Model,width=800,align=center]` + + // Reconstruct file content + const newContent = beforeBlock + '\n\n' + imageRef + '\n\n' + afterBlock + + fs.writeFileSync(filePath, newContent) + console.log(`✓ Updated: ${filePath}`) +} + +/** + * Main function to process AsciiDoc files + */ +async function main() { + const args = process.argv.slice(2) + const filePattern = args[0] || 'asciidoc/courses/**/*.adoc' + const format = (args[1] as 'png' | 'svg') || 'svg' + + console.log(`Searching for mermaid diagrams in: ${filePattern}`) + console.log(`Output format: ${format}\n`) + + // Check if mermaid-cli is installed + try { + execSync('mmdc --version', { stdio: 'ignore' }) + } catch (error) { + console.error('✗ mermaid-cli (mmdc) is not installed.') + console.error(' Install it with: npm install -g @mermaid-js/mermaid-cli') + console.error(' Or locally: npm install --save-dev @mermaid-js/mermaid-cli') + process.exit(1) + } + + // Find all AsciiDoc files + const files = await glob(filePattern) + + if (files.length === 0) { + console.log('No AsciiDoc files found.') + return + } + + console.log(`Found ${files.length} file(s) to process.\n`) + + for (const filePath of files) { + console.log(`Processing: ${filePath}`) + + const blocks = extractMermaidBlocks(filePath) + + if (blocks.length === 0) { + console.log(` No mermaid diagrams found.\n`) + continue + } + + console.log(` Found ${blocks.length} mermaid diagram(s).`) + + // Process blocks in reverse order to maintain line numbers + for (let i = blocks.length - 1; i >= 0; i--) { + const block = blocks[i] + const fileDir = path.dirname(filePath) + const imagesDir = path.join(fileDir, 'images') + + // Ensure images directory exists + if (!fs.existsSync(imagesDir)) { + fs.mkdirSync(imagesDir, { recursive: true }) + } + + const imagePath = path.join(imagesDir, block.imageName) + + // Compile mermaid to image + compileMermaidToImage(block.content, imagePath, format) + + // Replace mermaid block with image reference + replaceMermaidBlock(filePath, block, imagePath) + } + + console.log('') + } + + console.log('✓ Done!') +} + +// Run the script +main().catch(console.error) +